通过 pyspark.sql.dataframe 将 XML 数据转换为 pandas 数据帧

Posted

技术标签:

【中文标题】通过 pyspark.sql.dataframe 将 XML 数据转换为 pandas 数据帧【英文标题】:Convert XML data to pandas dataframe via pyspark.sql.dataframe 【发布时间】:2019-03-15 15:21:57 【问题描述】:

我的背景:长期 SAS 和 R 用户,试图弄清楚如何使用 Python 和 Spark 在 Azure Databricks 中做一些基本的事情。抱歉,下面缺少可重现的示例;我不知道如何创建这样的。

我正在尝试从一个复杂的 XML 文件中读取数据。我已经达到了这一点,我有一个 pyspark.sql.dataframe(称之为 xml1),这种安排:

RESPONSE:array
  element:array
    element:struct
      VALUE:string
      VARNAME:string

xml1 数据框如下所示:

[Row(RESPONSE=[[Row(VALUE='No', VARNAME='PROV_U'), Row(VALUE='Included', VARNAME='ADJSAMP'), Row(VALUE='65', VARNAME='AGE'), ...

当我使用 xml2=xml1.toPandas() 时,我得到了这个:

                      RESPONSE
0   [[(No, PROV_U), (Included, ADJSAMP), (65, AGE)...
1   [[(Included, ADJSAMP), (71, AGE), ...
...

至少,我想将其转换为具有两列 VARNAME 和 VALUE 的 Pandas 数据框。更好的解决方案是使用 VARNAME 值命名的列(例如 PROV_U、ADJSAMP、AGE)的数据框,每个响应一行。感谢在中间步骤中提供正确 Python 术语名称的有用提示!

【问题讨论】:

【参考方案1】:

处理结构数组爆炸是您的答案。这是有关如何使用爆炸的链接https://hadoopist.wordpress.com/2016/05/16/how-to-handle-nested-dataarray-of-structures-or-multiple-explodes-in-sparkscala-and-pyspark/

【讨论】:

在 Stack Overflow 上不鼓励仅链接的答案,因为如果链接因任何原因消失,它们将变得无用。您应该edit您的答案,以在答案本身中包含与问题相关的最重要部分。

以上是关于通过 pyspark.sql.dataframe 将 XML 数据转换为 pandas 数据帧的主要内容,如果未能解决你的问题,请参考以下文章

在 PySpark 的两个不同 pyspark.sql.dataframes 中的两列中创建一个 pyspark.sql.dataframe

pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换

pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换

执行 pyspark.sql.DataFrame.take(4) 超过一小时

将pyspark列连接到pyspark DataFrame

如何以 xml 格式保存 pyspark sql DataFrame