在python中,字节字符串可以简单地保存到单个xml文件中:
with open('/home/user/file.xml' ,'wb') as f:
f.write(b'<Value>1</Value>')
当前输出:/home/user/file.xml(保存在本地文件中的文件)
问题:如何将字符串保存到pyspark中hdfs上的xml文件:
预期输出:'hdfs://hostname:9000/file.xml'
背景:大量的xml文件是由第三方webapi提供的。我在pyspark建造了通往三角洲湖的etl管道。数据是由aiohttp异步提取的,接下来我想在将sparkDataframe保存到delta-lake之前使用sparkxml进行转换(需要pyspark)。我在寻找建造管道的最有效方法。
github上的spark xml开发人员也提出了类似的问题。https://github.com/databricks/spark-xml/issues/515
最新研究:
sparkxml用作输入xml文件,直接作为文本存储在磁盘或sparkdataframe上
因此,我只能使用以下两个选项之一:
a) 一些hdfs客户端(pyarrow、hdfs、aiohdfs)将文件保存到hdfs(hdfs上的文本文件格式不是很有效)
b) 将数据加载到spark dataframe以进行spark xml转换(delta lake的本机格式)
如果你有其他想法,请告诉我。
1条答案
按热度按时间6jjcrrmo1#
不要被databricks sparkxml文档所误导,因为它们会导致使用未压缩的xml文件作为输入。直接下载xmls到sparkDataframe效率非常低,而且速度更快。databricks xml pyspark版本不包括它,但有一个解决方法:
下载到列表的XML
xml字符串的sparkDataframe转换:
解码字节:b'string'。decode('utf-8')
@mck回答有关xmls的更多信息:如何从多个具有属性的嵌套xml文件转换为sparkDataframe数据