将88个JSON文件合并和/或读取到Dataframe中-不同的数据类型



我基本上有一个过程,其中我对API进行多次调用,并在JSON返回传递中使用一个令牌,该令牌打包到函数顶部,再次调用API以获得;分页的";文件

我总共需要调用并下载88个JSON文件,总共758mb。JSON文件都以相同的方式格式化;模式";或者至少应该这样做。我尝试在每个JSON文件下载到数据帧后读取它,然后尝试将该数据帧合并到主数据帧,所以本质上我将有一个大数据帧,其中包含所有88个JSON文件。

然而,我遇到的问题大致是在文件66上——系统(Python/Databricks/Spark)决定更改字段的文件类型。它总是一个string,然后我猜当一个值实际出现在该字段中时,它会变为boolean。问题是unionbyName由于数据类型不同而失败。

对我来说,解决这个问题的最佳方法是什么?我想用";延伸";将所有的JSON文件合并为一个大文件,但是一个758mb的JSON文件将是一项巨大的阅读和任务。

另一种解决方案是显式设置读取JSON文件的模式,使其始终是相同的类型吗?

如果您知道这些文件的属性,您可以在读取它们之前定义模式,并使用该模式创建一个空df,这样您就可以使用allowMissingColumns=True:访问unionByName

类似于:

from pyspark.sql.types import *
my_schema = StructType([
StructField('file_name',StringType(),True),
StructField('id',LongType(),True),
StructField('dataset_name',StringType(),True),
StructField('snapshotdate',TimestampType(),True)
])
output = sqlContext.createDataFrame(sc.emptyRDD(), my_schema)
df_json = spark.read.[...your JSON file...]
output.unionByName(df_json, allowMissingColumns=True)

我不确定这是你要找的。我希望它能帮助

最新更新