我正在尝试从存储在本地磁盘上的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中使用它。
答案 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