如何从PySpark的SQLLite db文件加载表?

时间:2016-08-16 22:16:54

标签: python sqlite apache-spark pyspark data-science

我正在尝试从存储在本地磁盘上的SQLLite .db文件中加载表。在PySpark中有没有干净的方法呢?

目前,我正在使用一种有效但不那么优雅的解决方案。首先我通过sqlite3使用pandas读取表格。一个问题是在流程期间,架构信息未通过(可能是也可能不是问题)。我想知道是否有一种直接的方法来加载表而不使用Pandas。

import sqlite3
import pandas as pd

db_path = 'alocalfile.db'
query = 'SELECT * from ATableToLoad'

conn = sqlite3.connect(db_path)
a_pandas_df = pd.read_sql_query(query, conn)

a_spark_df = SQLContext.createDataFrame(a_pandas_df)

使用jdbc似乎有办法做到这一点,但我还没弄清楚如何在PySpark中使用它。

2 个答案:

答案 0 :(得分:2)

首先,您需要的是在路径中使用JDBC驱动程序jar启动pyspark 下载sqllite jdbc驱动程序并在下面提供jar路径。 https://bitbucket.org/xerial/sqlite-jdbc/downloads/sqlite-jdbc-3.8.6.jar

pyspark --conf spark.executor.extraClassPath=<jdbc.jar> --driver-class-path <jdbc.jar> --jars <jdbc.jar> --master <master-URL>

有关上述pyspark命令的说明,请参阅以下文章

Apache Spark : JDBC connection not working

现在,您将如何做到这一点: -

现在要读取sqlite数据库文件,只需将其读入spark dataframe

即可
df = sqlContext.read.format('jdbc').\
     options(url='jdbc:sqlite:Chinook_Sqlite.sqlite',\
     dbtable='employee',driver='org.sqlite.JDBC').load()

df.printSchema()查看您的架构。

完整代码: - https://github.com/charles2588/bluemixsparknotebooks/blob/master/Python/sqllite_jdbc_bluemix.ipynb

谢谢, 查尔斯。

答案 1 :(得分:0)

基于@charles gomes 的回答:

from pyspark.sql import SparkSession

spark = SparkSession.builder\
           .config('spark.jars.packages', 'org.xerial:sqlite-jdbc:3.34.0')\
           .getOrCreate()

df = spark.read.format('jdbc') \
        .options(driver='org.sqlite.JDBC', dbtable='my_table',
                 url='jdbc:sqlite:/my/path/alocalfile.db')\
        .load()

对于其他 JAR 版本,请参考 Maven Repository