我正在运行msazure云上的hdinsight spark cluster。spark版本是2.4.6,scala版本是2.11.12,python版本是2.7.12
我在azure数据湖存储器上有很多xml文件,它们是用utf-16le(如果我运行file-i命令)或ucs-2le-bom(如果我用notepad++)编码的
我想读取jupyter笔记本中的那些文件,以便能够解析xml并提供一些可视化效果,但是,我无法正确显示数据。以下是我迄今为止尝试的:
%%configure -f
{"conf":{"spark.jars.packages":"com.databricks:spark-xml_2.11:0.10.0"}}
data = spark.read.format("com.databricks.spark.xml").option("rootTag", "rootElement").option("rowTag", "rowElement").\
option("encoding", "utf-16LE").\
option("charset", "utf-16LE").\
load("abfs://blob@datalakestorage.dfs.core.windows.net/files/")
我尝试过utf-16le写入的各种变体(utf-16 le、utf-16le、utf-16le),但似乎没有任何效果,因为当我这样加载文件时,我要么得到空Dataframe:
data.show()
root
++
||
++
++
或者Dataframe只加载带有中文记录的\u损坏的\u记录(此特定文件中的文本为德语和英语):
root
|-- _corrupt_record: string (nullable = true)
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|_corrupt_record |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|琼⁵牣慥楴湯慤整∽
我也试着把这些文件读作rdd:
file_rdd = spark.read.text("abfs://blob@datalakestorage.dfs.core.windows.net/files/", wholetext=True).rdd
data = file_rdd.collect()
data[0:15]
[Row(value='��<\x00?\x00x\x00m\x00l\x00 \x00v\ .......
我最后尝试的是:
data = sc.textFile("abfs://blob@datalakestorage.dfs.core.windows.net/files/", use_unicode=False).map(lambda x: x.decode("utf-16le"))
data.collect()[0:15]
我还收到一个错误,指出unicodedecodeerror:'utf16'编解码器无法解码位置0:截断数据中的字节0x00
如果我在notepad++中手动更改编码,数据将加载并可读,但目前,我无法重新编码数据湖上的所有文件。
谢谢
暂无答案!
目前还没有任何答案,快来回答吧!