我正在使用spark作业从一个说明区域读取csv文件数据,并使用以下代码行将该数据复制到HDFS中:
val conf = new SparkConf().setAppName("WCRemoteReadHDFSWrite").set("spark.hadoop.validateOutputSpecs", "true");
val sc = new SparkContext(conf)
val rdd = sc.textFile(source)
rdd.saveAsTextFile(destination)
csv文件的格式如下:
CTID,C3UID,区域,产品,关键字
1,1004634181441040000,东,移动,NA
2,1004634181441040000,西,平板,NA
当数据进入HDFS时,它采用以下格式:
CTID,C3UID,区域,产品,关键字
1,1.00463E + 18,东,移动,NA
2,1.00463E + 18,西,平板,NA
我无法找到任何有效理由。 任何形式的帮助将不胜感激。
此致 布佩希
答案 0 :(得分:3)
因为您的C3UID是一个很大的数字,它会被解析为Double,然后以标准的Double表示法保存。您需要修复模式,并确保将第二列读取为Long,BigDecimal或String,然后字符串表示将不会发生变化。
答案 1 :(得分:0)
有时您的CSV文件也可能是罪魁祸首。不要在Excel中打开CSV文件,因为excel可以将这些大数值转换为指数格式,因此一旦使用spark作业将数据导入hdfs,它就会以字符串格式显示。
因此,请确保在使用spark job导入hdfs之前,不要在Excel中打开CSV中的数据。如果您真的想要查看excel的内容,请使用notepad ++或任何其他文本编辑器工具