在使用sqlite创建的数据库文件上执行spark操作时出现问题

时间:2019-01-07 17:28:34

标签: python apache-spark sqlite pyspark

我有一个先前创建的数据库文件,它是使用sqlite和python api创建的。我使用Pyspark 2.2.1加载它,这还不错。但是,如果我执行类似.filter()之类的操作,结果是一个空的数据帧。以下是我尝试的代码,并且使用了两个sqlite驱动程序,但均未成功(org.xerial:sqlite-jdbc:3.16.1sqlite-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无法访问列名。我无法解决。

0 个答案:

没有答案