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 的内容,请使用记事本++或任何其他文本编辑器工具
我正在使用 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 的内容,请使用记事本++或任何其他文本编辑器工具