首页 > 解决方案 > 无法将数据放入 pyspark 中的所需架构

问题描述

我有 pyspark 数据框,如下所示

>>> df.show(1, False)                                                           
{"data":{"probability":0.2345,"customerId":1234567,"region":"BR"},"uploadedDate":1542548806295} 

以上是我不传递任何模式作为输入时的输出...

我正在尝试以下脚本来加载带有提到的架构的数据。

SCHEMA = StructType([ StructField('probabilityMale',LongType(),True),\
                    StructField('customerId',LongType(),True),\
                    StructField('region',StringType(),True),\
                    StructField('uploadedDate',StringType(),True)])

df = spark.read.format('csv').\
     option('header','false').\
     option('delimiter','\t').\
     schema(SCHEMA).\
     load(path)

但这并没有在单独的列中给出所有数据点。我也试过了inferSchema

df = spark.read.format('csv').\
     option('header','false').\
     option('delimiter','\t').\
     option("inferSchema", "true").\
     load(path)

但是得到与前面提到的相同的输出......

我如何提及架构并在每列中有数据?

标签: jsonapache-sparkpyspark

解决方案


您有一个 JSON 输入,您应该使用 JSON 阅读器而不是 CSV 阅读器来阅读:

df = spark.read.json(path)

要单独获取列,您可以扩展 struct data

df2 = df.select('data.*', 'uploadedDate')

推荐阅读