我有一个像下面这样的spark dataframe:
| value_1| value_2| value_3|值_4| value_4 |
| --|--|--|--| ------------ |
| abcd123| efgh456|联系我们|mnop012| mnop012 |
我需要将这个dataframe从databricks和XML文件转换为csv文件,以便所有列名都相同,如下所示。
| 价值|价值|价值|价值| value |
| --|--|--|--| ------------ |
| abcd123| efgh456|联系我们|mnop012| mnop012 |
也许我可以通过将数据类型分别更改为String,Char,Varchar来输出3个同名的列。但现在有四列。
这是一个xml示例:
<actions>
<action>
<action_type>create</action_type>
<profile>
<ID>1</ID>
<value>abcd123</value>
<value>efgh456</value>
<value>ijkl789</value>
<value>mnop012</value>
</profile>
</action>
</actions>
字符串
2条答案
按热度按时间epggiuax1#
默认情况下,spark不允许创建
csv file with duplicate column names
。但是我们可以为这种情况做一个变通方案,在数据中引入所需的列名作为一个新行,然后写为
csv
文件**without header
**。Example:
字符串
Print the file contents:
型
wvyml7n52#
我不知道PySpark/Spark,所以我只能建议你直接从spark dataframe转换为中间CSV,然后使用普通Python将其转换为你需要的CSV和XML。
假设你可以得到一个input.csv,比如(使用
df.write.csv(...)
):字符串
读取CSV并将行保存到列表中(如果存在,则丢弃标题):
型
然后用正确的标题写回行:
型
这给了我:
型
假设第一列是您的ID,那么它只是在ID之后的输入中每隔一列写入一个“value”列。
Python的xml.etree.ElementTree将再次使用行列表构建您需要的XML,从自顶向下开始,从根“actions”元素开始:
型
同样,它假设第一列是ID,后面的每一列都应该是“value”。这给了我:
型