Apache spark Spark中json数据模式的一种推断方法

Apache spark Spark中json数据模式的一种推断方法,apache-spark,pyspark,Apache Spark,Pyspark,假设我有一个带有列data的dataframe。 在本专栏中,我有一个包含json的字符串。 诀窍在于json并不总是满的,某些行中可能缺少某些属性 请参见下面的示例以了解详细信息 column_name_placeholder | data foo {"attr1":1} foo {"attr2":2} bar {"at

假设我有一个带有列
data
的dataframe。 在本专栏中,我有一个包含json的字符串。 诀窍在于json并不总是满的,某些行中可能缺少某些属性

请参见下面的示例以了解详细信息

column_name_placeholder | data
foo                      {"attr1":1}
foo                      {"attr2":2}
bar                      {"attr0":"str"}
bar                      {"attr3":"po"}
我要寻找的是一种为“column\u name\u placeholder”中的每个键推断完整json模式的方法

所以答案是这样的

foo
{
"attr1":int,
"attr2":int
}
bar
{
"attr0":string,
"attr3":string
}
我能做的唯一方法就是深入到RDD级别,在map阶段使用某种第三方库推断模式,然后在reduce阶段将该模式再次与某种第三方库合并


我是否缺少了一些spark*魔力?

您可以将其转换为RDD,然后使用
spark.read.json
再次读取,并让它推断模式

column\u name\u placeholder=bar
示例:

spark.read.json(
    df.filter("column_name_placeholder = 'bar'").rdd.map(lambda row: row.data)
).printSchema()

#root
# |-- attr0: string (nullable = true)
# |-- attr3: string (nullable = true)

您可以使用
spark.read.json
转换为RDD并再次读取,然后让它推断模式

column\u name\u placeholder=bar
示例:

spark.read.json(
    df.filter("column_name_placeholder = 'bar'").rdd.map(lambda row: row.data)
).printSchema()

#root
# |-- attr0: string (nullable = true)
# |-- attr3: string (nullable = true)