2015-11-12 3 views
0

Я пробовал базовый тестовый пример чтения данных из dashDB в искру, а затем снова записывал его обратно в dashDB.Как выполнить произвольный sql из ноутбука pyspark с помощью SQLContext?

Этап 1. Во-первых в записной книжке, я прочитал данные:

sqlContext = SQLContext(sc) 
dashdata = sqlContext.read.jdbc(
    url="jdbc:db2://bluemix05.bluforcloud.com:50000/BLUDB:user=****;password=****;", 
    table="GOSALES.BRANCH" 
).cache() 

Шаг 2. Тогда из dashDB создать целевую таблицу:

DROP TABLE ****.FROM_SPARK; 
CREATE TABLE ****.FROM_SPARK AS (
    SELECT * 
    FROM GOSALES.BRANCH 
) WITH NO DATA 

Шаг 3. Наконец, в записной книжке я сохранить данные в таблицу:

from pyspark.sql import DataFrameWriter 
writer = DataFrameWriter(dashdata) 
dashdata = writer.jdbc(
    url="jdbc:db2://bluemix05.bluforcloud.com:50000/BLUDB:user=****;password=****;", 
    table="****.FROM_SPARK" 
) 

Вопрос: Можно ли запустить SQL на шаге 2 из pyspark? Я не мог понять, как это можно сделать с pyspark documentation. Я не хочу использовать vanilla python для подключения к dashDB из-за усилий, связанных с настройкой библиотеки.

ответ

3

Использование ibmdbpy. См. Это краткое сообщение demo.

С помощью as_idadataframe() вы можете загрузить DataFrames в dashDB в виде таблицы.


Добавлены ключевые шаги здесь StackOverflow не любит ссылки на ответы:

Шаг 1: Добавить в кювету:

#!pip install --user future 
#!pip install --user lazy 
#!pip install --user jaydebeapi 
#!pip uninstall --yes ibmdbpy 
#!pip install ibmdbpy --user --no-deps 
#!wget -O $HOME/.local/lib/python2.7/site-packages/ibmdbpy/db2jcc4.jar https://ibm.box.com/shared/static/lmhzyeslp1rqns04ue8dnhz2x7fb6nkc.zip 

Шаг 2: Тогда от стационарной ячейки ноутбука

from ibmdbpy import IdaDataBase 
idadb = IdaDataBase('jdbc:db2://<dashdb server name>:50000/BLUDB:user=<dashdb user>;password=<dashdb pw>') 
.... 
+0

Предположительно вы загрузили db2jcc4.jar в свою учетную запись? IBM должна делать эти файлы доступными в Интернете, поскольку использование загрузки файлов из неформальных источников является угрозой безопасности и ненадежностью, поскольку файлы со временем исчезают. –

+0

Да, это всего лишь временное решение о том, чтобы заставить водителя забрать в этом ноутбуке Bluemix. Мы работаем над правильным решением. –

+0

А, отлично! Есть ли билет для правильного решения, на которое я могу подписаться? –

0
Yes, 
You can create table in dashdb from Notebook. 
Below is the code for Scala : 

import org.apache.spark.SparkContext 
import org.apache.spark.SparkContext._ 
import org.apache.spark.SparkConf 
import org.apache.spark.sql._ 
import org.apache.log4j.Logger 
import org.apache.log4j.Level 
import java.sql.Connection 
import java.sql.DriverManager 
import java.sql.SQLException 
import com.ibm.db2.jcc._ 

import java.io._ 

    val jdbcClassName="com.ibm.db2.jcc.DB2Driver" 
    val url="jdbc:db2://awh-yp-small02.services.dal.bluemix.net:50001/BLUDB:sslConnection=true;" // enter the hostip fromc connection settings 
    val user="<username>" 
    val password="<password>" 
    Class.forName(jdbcClassName) 
    val connection = DriverManager.getConnection(url, user, password) 
    val stmt = connection.createStatement() 

stmt.executeUpdate("CREATE TABLE COL12345(" + 



        "month VARCHAR(82))") 

    stmt.close() 
     connection.commit() 
     connection.close()