我正在尝试使用来自xerial和sqlite-jdbc的this example将Python数据帧写入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"})
答案 0 :(得分:3)
通常,每个Spark执行程序单独执行读取和写入数据源,并且必须可以从每个工作节点访问接收器。一般来说,它使SQLite在这种情况下相当无用(尽管它对于本地查找很有用)。
如果要以非本地模式将输出存储在数据库中,则需要一个合适的数据库服务器。