如何从 PySpark 的 SQLLite 数据库文件加载表?

问题描述 投票:0回答:3

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

python sqlite apache-spark pyspark data-science
3个回答
4
投票

因此,您需要的第一件事是在路径中使用 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 连接不起作用

现在您可以这样做:-

现在要读取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

谢谢, 查尔斯.


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 存储库


0
投票

如果我在 datalake gen 2 存储中有 sqlite 文件,这将不起作用。那么如何通过 Az 存储实现此目的。

© www.soinside.com 2019 - 2024. All rights reserved.