scala - 结果 csv 中的行数增加并且数据损坏
问题描述
将数据框从一种形式转换为另一种形式:
Parquet -> Parquet (number of rows remains same, NO PROBLEM)
Parquet -> CSV (number of rows INCREASES! Data corruption!)
首先从 parquet 读取数据,然后使用以下命令转换为 csv/parquet:
<input_dataframe>.coalesce(1).write.option("header", true).csv/parquet(output_path)
scala> spark.read.option("header", true).parquet(input_path).count
Long = 8387913
scala> spark.read.option("header", true).csv(output_path).count
Long = 8387932
由于这些行相互混合,记录被溢出或损坏。
只有在您必须使用 spark读取 csv 时才有解决方法。您可以将选项传递multiline
为true
.
scala> spark.read.option("header", true).option("multiline", true).csv(output_path).count
Long = 8387913 << input parquet contains same number of records
但这不是我想要对 CSV 做的事情。我需要在不使用 spark 的情况下阅读它。
如何在将数据帧写入 csv时保持结构完整?
注意:这可能不是所有数据帧的可重现案例。我的数据有一些未知的原因。当我发现字符串类型字段将整数值存储在结果 CSV 中,并且一整套记录被任意值损坏时,我注意到了这个问题。CSV 大小 ~ 2.5 GB。
解决方案
推荐阅读
- oracle - Is there any method to truncate date, so that it remains using index by date
- java - 如何在对模拟静态方法的顺序调用中返回多个答案
- java - 如何自动列出 java + React 项目中使用的所有第三方组件?
- c# - Asp.net SignalR 功能在 asp.net 核心中不起作用
- javascript - 为什么“light.castShadow = true”会导致我的场景中断?
- c# - 如何检查图像是否被手指移动?(操纵)
- .htaccess - 将子域上的所有页面重写为子域
- mercurial - 推/拉前自动触发汞库验证,无需编程
- python - Python:多处理代码非常慢
- jquery - 如何将嵌套的 json 渲染到数据表列中