如何从 PySpark 的 SQLite db 文件加载表?
Posted
技术标签:
【中文标题】如何从 PySpark 的 SQLite db 文件加载表?【英文标题】:How to load table from SQLLite db file from PySpark? 【发布时间】:2016-08-16 22:16:54 【问题描述】:我正在尝试从存储在本地磁盘上的 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 中使用它。
【问题讨论】:
什么架构信息?你是说数据类型?并不是说 sqlite 真的 有它们...... 【参考方案1】:首先,您需要在路径中使用 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 数据帧
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
谢谢, 查尔斯。
【讨论】:
【参考方案2】:基于@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
【讨论】:
以上是关于如何从 PySpark 的 SQLite db 文件加载表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的 Android 程序的 SQLite Manager 应用程序中使用我创建的 SQLite DB
如何从 sqlite DB 中列出表名——Android [重复]
如何修复:Jooq 代码不会从 sql 脚本为内存 db 中的 sqlite 生成 java 代码