0

文件分隔符我有特殊的分隔符的文本文件:特殊字符作为火花

35¡1682¡231¡20.00000000¡50.00000000¡0.00000000¡0.00000000¡304.1100¡333.110000 
¡I¡1¡0¡10¡SHORT NAME 
1105682¡0¡100000.00000000¡100000.00000000¡1105682¡D¡D 

我想基于当前¡特殊的分隔符火花此文件分割。 请建议解决方法。这个命令的 产出比来作为

val input_header = sc.textFile(path).first() 

Out of sc.textfile

当我在读这RDD文件,并显示它的内容。它显示分隔符为?

+0

正确读取你的文件你检查你的文件的UTF编码? –

+0

你应该很可能检查这个:https://stackoverflow.com/questions/43200978/spark-read-wholetextfiles-with-non-utf-8-encoding –

回答

0

您可以读取文件作为收集位和字符串位来提供编码。 如果你使用Scala的API会是这样的

val inputHeader = sc.binaryFiles(path).mapValues(line => new String(line.toArray(), StandardCharsets.{your charset}) 

然后,您可以确保星火有

inputHeader.first 
+0

在这里,我们已经指定了分隔符。我的平台是Unix,所以字符集是UTF_8的权利? – Vinitkumar

+0

import java.nio.charset._ val input_header = sc.binaryFiles(“hdfs:///user/pandvini_adm/B%52%41IN%53D%41ILY_BW_a12_NT%46_rnv_20160514_20160520121442.dat”)。 mapValues(线=>新的字符串((line.toArray(), “UTF-8”))) 但是,得到误差等 :31:错误:重载方法构造字符串替代品: (X $ 1:StringBuilder的)串 (X $ 1:StringBuffer的)字符串 (X $ 1:数组[字节])字符​​串 (X $ 1:阵列[字符])字符串 (X $ 1:字符串) 不能被应用到((数组[字节],字符串)) mapValues(line => new String((line.toArray(),“utf-8”))) – Vinitkumar

+0

您不应该使用像“utf-8”这样的字符串。 您应该使用定义的字符集之一,例如StandardCharsets.UTF_8。 或者你可以使用Charset.forName(“utf-8”) – addmeaning