在Spark中读取数据时编码困难

时间:2018-02-19 04:27:35

标签: apache-spark pyspark

关于我之前的question,当我发出命令时,

filePath = sc.textFile("/user/cloudera/input/Hin*/datafile.txt")
filePath.collect()

数据的某些部分有' \ xa0'以每个单词为前缀,而其他部分数据不具有该特殊字符。我正在附上2张图片,其中一张带有' \ xa0',另一张没有' \ xa0'。 With '\xa0' Without '\xa0' 2张图片中显示的内容属于同一个文件。 Spark只会以相同的方式读取同一文件中的部分数据。我检查了HDFS中的原始数据文件,它没有问题。

我觉得它与编码有关。我尝试了所有方法,比如在replaceflatMap(lambda line: line.replace(u'\xa0', ' ').split(" "))等平面地图中使用flatMap(lambda line: line.replace(u'\xa0', u' ').split(" "))选项,但没有一个方法适合我。这个问题可能听起来很糟糕,但我是使用Apache Spark的新手,我需要一些帮助才能解决这个问题。

任何人都可以帮助我吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

检查文件的编码。当您使用sc.textFile时,spark需要UTF-8编码文件。 其中一个解决方案是使用sc.binaryFiles获取文件,然后应用预期的编码。

sc.binaryFile创建一个键/值rdd,其中key是文件的路径,value是作为字节的内容。 如果您只需要保留文本并应用解码功能,那么:

filePath = sc.binaryFile("/user/cloudera/input/Hin*/datafile.txt")
filePath.map(lambda x :x[1].decode('utf-8')) #or another encoding depending on your file