我有一个先前创建的数据库文件,它是使用sqlite和python api创建的。我使用Pyspark 2.2.1加载它,这还不错。但是,如果我执行类似.filter()
之类的操作,结果是一个空的数据帧。以下是我尝试的代码,并且使用了两个sqlite驱动程序,但均未成功(org.xerial:sqlite-jdbc:3.16.1
和sqlite-jdbc-3.8.6.jar
):
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
spark = SparkSession.builder \
.getOrCreate()
props = {'driver': 'org.sqlite.JDBC',
'date_string_format': 'yyyy-MM-dd HH:mm:ss'}
df = spark.read \
.jdbc("jdbc:sqlite:{}".format(input_db),
"words", properties=props)
df.show()
## Output:
+-------+----+
| word| coo|
+-------+----+
| word| 0,0|
| search| 0,1|
| word| 0,2|
| find| 0,3|
| word| 0,4|
| seek| 0,5|
| word| 0,6|
| sleuth| 0,7|
| or| 0,8|
|mystery| 0,9|
| word|0,10|
| puzzle|0,11|
| is|0,12|
| word|0,13|
| game|0,14|
| that|0,15|
| is|0,16|
|letters|0,17|
| of|0,18|
| word|0,19|
+-------+----+
only showing top 20 rows
##
# I tested two methods to retrive rows matching 'word', without success
df.filter(F.col("word") == "word").show()
df.createOrReplaceTempView("DATA")
spark.sql("select * from DATA where word='word'").show()
## Output
+----+---+
|word|coo|
+----+---+
+----+---+
我认为数据结构的构造存在问题,使得spark无法访问列名。我无法解决。