两个不同格式的json,转换为一个一致的格式并读入dataframe。
>>> df.printSchema()
root
|-- ReplicateRequest: struct (nullable = true)
| |-- MappingReplicateRequestMessage: array (nullable = true)
| | |-- element: struct (containsNull = true)
| | | |-- MGroup: struct (nullable = true)
| | | | |-- Object: array (nullable = true)
| | | | | | |-- Code: string (nullable = true)
df1.printSchema()
root
|-- ReplicateRequest: struct (nullable = true)
| |-- MappingReplicateRequestMessage: struct (nullable = true)
| | |-- element: struct (containsNull = true)
| | | |-- MGroup: struct (nullable = true)
| | | | |-- Object: array (nullable = true)
| | | | | | |-- Code: string (nullable = true)
如果我想访问Object.code列值:
1.在第一个dataframe中,我必须在MappingReplicateRequestMessage上使用explode来向下钻取它。df.select("ReplicateRequest.*").withColumn("expl",explode((col("MappingReplicateRequestMessage")))).select("expl.*").select("MGroup.Object")
1.在第二 Dataframe 中,我可以直接访问而不分解。df1.select("ReplicateRequest.MappingReplicateRequestMessage.MGroup.*")
我如何使它一致和通用从转换到数组结构或结构数组之前解析
1条答案
按热度按时间g6ll5ycj1#
不能使用一个
spark.read
调用将两个具有不同模式的文件读入一个DataFrame
。您将不得不在两个不同的
DataFrame
中读取它们,操作每个DataFrame
以使用所需的公共模式创建新的DataFrame,然后将它们合并。也可以将输入读取为字符串
然后应用一个可以处理两种不同格式的UDF,提取
Object.code
并返回它,这样就得到了一个具有统一模式的新列。需要可复制的例子。将示例数据添加到您的示例中,并使其成为可重现的示例,如下所示:
图纸: