【问题标题】:No such table while writing to sqlite3 database from Pyspark via JDBC通过 JDBC 从 Pyspark 写入 sqlite3 数据库时没有这样的表
【发布时间】:2016-09-22 15:47:12
【问题描述】:

我正在尝试使用来自 xerial 的 sqlite-jdbcthis example 将 Spark 数据帧写入 Python 中的 sqlite3 数据库。 我收到了错误

java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such table: test)

数据库文件hello.db实际上是使用具有架构的表test创建的

sqlite> .schema test
CREATE TABLE test (age BIGINT , name TEXT );

我使用spark-submit --jars ../extras/sqlite-jdbc-3.8.11.2.jar example.py 运行它,以便它找到驱动程序。

我正在运行 Spark 1.6.0。

(希望)可重现的示例

import os
os.environ["SPARK_HOME"] = "/usr/lib/spark"
import findspark
findspark.init()
from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext

config = {
            "spark.cores.max": "5",
            "spark.master" : "spark://master2:7077",
            "spark.python.profile": "false",
            "spark.ui.enabled": "false",
            "spark.executor.extraClassPath": "../extras/sqlite-jdbc-3.8.11.2.jar",
            "spark.driver.extraClassPath": "../extras/sqlite-jdbc-3.8.11.2.jar",
            "spark.jars": "../extras/sqlite-jdbc-3.8.11.2.jar"
        }

conf = SparkConf()
for key, value in config.iteritems():
        conf = conf.set(key, value)

sc = SparkContext(appName="test", conf=conf)
sqlcontext = SQLContext(sc)

d = [{'name': 'Alice', 'age': 31}]
df = sqlcontext.createDataFrame(d)

url = "jdbc:sqlite:hello.db"
df.write.jdbc(url=url, table="test", mode="overwrite", properties={"driver":"org.sqlite.JDBC"})

【问题讨论】:

  • 我很困惑它应该如何工作。每个 executor 单独执行 writer,因此使用基于文件的数据库没有多大意义。
  • 我也很困惑 :)。我明白你的意思,我猜这意味着驱动程序创建了执行程序看不到的表......那么使用外部 mysql 服务器更有意义吗?这种情况是否有解决方法,还是我必须收集()并手动完成?
  • 如果除了简单的实验之外,您还需要此功能,您至少需要合适的数据库服务器(通常是一个可以从每个执行程序并行访问的接收器)。

标签: sqlite jdbc apache-spark pyspark


【解决方案1】:

一般来说,每个 Spark 执行器分别执行读取和写入数据源和接收器必须可从每个工作节点访问。一般来说,它使 SQLite 在这种情况下相当无用(尽管它非常适合本地查找)。

如果您想以非本地模式将输出存储在数据库中,您需要一个合适的数据库服务器。

【讨论】:

  • 这很有意义,感谢您的清晰快速的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多