关于我之前的question,当我发出命令时,
filePath = sc.textFile("/user/cloudera/input/Hin*/datafile.txt")
filePath.collect()
数据的某些部分有' \ xa0'以每个单词为前缀,而其他部分数据不具有该特殊字符。我正在附上2张图片,其中一张带有' \ xa0',另一张没有' \ xa0'。 2张图片中显示的内容属于同一个文件。 Spark只会以相同的方式读取同一文件中的部分数据。我检查了HDFS中的原始数据文件,它没有问题。
我觉得它与编码有关。我尝试了所有方法,比如在replace
,flatMap(lambda line: line.replace(u'\xa0', ' ').split(" "))
等平面地图中使用flatMap(lambda line: line.replace(u'\xa0', u' ').split(" "))
选项,但没有一个方法适合我。这个问题可能听起来很糟糕,但我是使用Apache Spark的新手,我需要一些帮助才能解决这个问题。
任何人都可以帮助我吗?提前谢谢。
答案 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