通过JDBC从Pyspark写入sqlite3数据库时没有这样的表

通过JDBC从Pyspark写入sqlite3数据库时没有这样的表,sqlite,jdbc,apache-spark,pyspark,Sqlite,Jdbc,Apache Spark,Pyspark,我正在尝试使用xerial和xerial编写一个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

我正在尝试使用xerial和xerial编写一个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"})

通常,每个Spark执行器分别执行读写操作,数据源和接收器必须可以从每个工作节点访问。一般来说,在这种情况下,它会使SQLite变得毫无用处(不过对于本地查找来说,它非常有用)


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

我不知道它应该如何工作。每个执行器分别执行writer,所以使用基于文件的数据库没有多大意义。我也很困惑:)。我明白你的意思了,我猜这意味着驱动程序创建了表,而执行者却看不到。。。使用外部mysql服务器更有意义吗?对于这种情况有解决方法吗?或者我必须收集()并手动执行吗?如果你想将其用于简单的实验之外的任何事情,你至少需要合适的数据库服务器(通常是一个可以从每个执行器并行访问的接收器)。现在这非常有意义,感谢你的清晰快速回答!