apache-spark - 如何编写标准 CSV
问题描述
读取标准 CSV文件非常简单,例如:
val t = spark.read.format("csv")
.option("inferSchema", "true")
.option("header", "true")
.load("file:///home/xyz/user/t.csv")
它读取一个真正的 CSV 文件,例如
fieldName1,fieldName2,fieldName3
aaa,bbb,ccc
zzz,yyy,xxx
并t.show
产生了预期的结果。
我需要相反,来编写标准 CSV 文件(不是非标准文件的目录)。
使用时看不到相反的结果是非常令人沮丧的write
。也许其他一些选择或某种format (" REAL csv please! ")
存在。
笔记
我正在使用 Spark v2.2并在Spark-shell上运行测试。
read的“语法逆”是write,因此预计会产生相同的文件格式。但结果
t.write.format("csv").option("header", "true").save("file:///home/xyz/user/t-writed.csv")
不是rfc4180标准格式的 CSV 文件,就像原始
t.csv
的
.t-writed.csv/
part-00000-66b020ca-2a16-41d9-ae0a-a6a8144c7dbc-c000.csv.deflate _SUCCESS
任何具有“读某物”的完整工具包的语言都能够“写某物”,这是一种正交性原则。
类似不解决
未解决问题的类似问题或链接,可能使用了不兼容的 Spark 版本,或者spark-shell使用它的限制。他们为专家提供了很好的线索:
@JochemKuijpers 指出的这个类似问题:我尝试了建议,但得到了同样丑陋的结果。
这个链接说有一个解决方案(!),但我无法
saveDfToCsv()
在我的 spark-shell 中复制/粘贴(“错误:未找到:类型 DataFrame”),一些线索?
解决方案
如果数据框不是太大,您可以尝试:
df.toPandas().to_csv(path)
如果数据框很大,您可能会出现内存不足错误或打开文件过多错误。
推荐阅读
- python-3.x - tf.data.Dataset batch 和 map 和 tf.contrib.data.map_and_batch 的区别
- reactjs - 当它进入 Object.map 时,“this”会发生什么
- python - 构建器问题。我尝试为android制作apk文件,但我不能
- ios - 如何将单元格添加到 UITableView 部分并保存核心数据信息
- apache-zeppelin - 如何使用内置 spark 2.3.2 构建 zeppelin 0.8.0
- jquery - 如何使用 jquery 将所选行中的标签加粗?
- arrays - 对于 PowerShell ArrayList,哪个是 Faster .Add 或 += 运算符?
- android - 带有两个图像的 Android 面具
- javascript - 这个数组真的需要扩展语法吗?
- c# - 从 asp.net razor 视图调用 ajax 请求