CSV 数据 exported/copied 以奇怪的格式传输到 HDFS

CSV data exported/copied to HDFS going in weird format

我正在使用 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,region,product,KeyWord

1,1004634181441040000,East,Mobile,NA

2,1004634181441040000,West,Tablet,NA

而当数据进入 HDFS 时,它采用以下格式:

CTId,C3UID,region,product,KeyWord

1,1.00463E+18,East,Mobile,NA

2,1.00463E+18,West,Tablet,NA

我找不到这背后的任何正当理由。 任何形式的帮助将不胜感激。

此致, 布佩什

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

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

因此请务必确保,在使用 spark 作业导入到 hdfs 之前,绝不能在 excel 中打开 CSV 格式的数据。如果您真的想查看 excel 的内容,请使用记事本++或任何其他文本编辑器工具