【问题标题】:How to executing arbitrary sql from pyspark notebook using SQLContext?如何使用 SQLContext 从 pyspark 笔记本执行任意 sql?
【发布时间】:2015-11-12 21:39:37
【问题描述】:

我正在尝试一个基本的测试用例,将数据从 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 documentation 看到如何做到这一点。我不想使用 vanilla python 连接到 dashDB,因为设置库涉及的工作量。

【问题讨论】:

    标签: ibm-cloud apache-spark-sql pyspark jupyter dashdb


    【解决方案1】:

    使用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>') 
    ....
    

    【讨论】:

    • 想必你已经把db2jcc4.jar上传到你的box账户了? IBM 应该在 Internet 上提供这些文件,因为依赖从非正式来源下载文件存在安全风险且不可靠,因为文件往往会随着时间的推移而消失。
    • 是的,这只是在此 Bluemix Notebook 环境中获取驱动程序的临时修复。我们正在寻找合适的解决方案。
    • 啊,太好了!有我可以订阅的正确解决方案的票吗?
    • jar文件上传到官方repo了吗?
    【解决方案2】:
    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      相关资源
      最近更新 更多