0

我正在尝试将数据从 dashDB 读取到 spark 中,然后再次将其写回 dashDB 的基本测试用例。

步骤 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"
)

问题:是否可以从 pyspark 运行第 2 步中的 sql?我无法从pyspark 文档中看到如何做到这一点。我不想使用vanilla python连接到 dashDB,因为设置库涉及的工作量。

4

2 回答 2

3

使用ibmdbpy。请参阅这个简短的演示

使用 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>') 
....
于 2015-11-13T07:45:04.850 回答
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()
于 2015-11-18T16:46:21.837 回答