以奇怪的格式导出/复制到HDFS的CSV数据

时间:2017-06-22 08:00:51

标签: csv hadoop apache-spark spark-streaming hadoop2

我正在使用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

我无法找到任何有效理由。 任何形式的帮助将不胜感激。

此致 布佩希

2 个答案:

答案 0 :(得分:3)

因为您的C3UID是一个很大的数字,它会被解析为Double,然后以标准的Double表示法保存。您需要修复模式,并确保将第二列读取为Long,BigDecimal或String,然后字符串表示将不会发生变化。

答案 1 :(得分:0)

有时您的CSV文件也可能是罪魁祸首。不要在Excel中打开CSV文件,因为excel可以将这些大数值转换为指数格式,因此一旦使用spark作业将数据导入hdfs,它就会以字符串格式显示。

因此,请确保在使用spark job导入hdfs之前,不要在Excel中打开CSV中的数据。如果您真的想要查看excel的内容,请使用notepad ++或任何其他文本编辑器工具