1

我的数据框的每一行都有一个 CSV 内容。

我正在努力将每一行保存在不同的特定表中。

我相信我需要使用 foreach 或 UDF 来完成此操作,但这根本行不通。

我设法找到的所有内容就像 foreachs 中的简单打印或使用 .collect() 的代码(我真的不想使用)。

我也找到了重新分区的方式,但这不允许我选择每一行的去向。

rows = df.count()
df.repartition(rows).write.csv('save-dir')

你能给我一个简单而有效的例子吗?

4

3 回答 3

1

将每一行保存为表格是一项昂贵的操作,不建议这样做。但是你正在尝试的可以像这样实现 -

df.write.format("delta").partitionBy("<primary-key-column>").save("/delta/save-dir")

现在每一行都将保存为一种.parquet格式,您可以从每个分区创建外部表。仅当您对每一行(即主键)都具有唯一值时,这才有效。

于 2019-06-28T20:53:52.573 回答
0

你试过了吗.mode("append").repartionBy("ID"),它会为每个ID创建一个目录,然后别忘了把模式

于 2019-07-18T21:01:07.383 回答
0

好吧,归根结底,它一如既往地非常简单,但我没有看到这一点。

基本上,当您执行 foreach 并且要保存的数据帧是在循环内构建时。worker 与 driver 不同,在保存时不会自动设置“/dbfs/”路径,所以如果不手动添加“/dbfs/”,它会将数据本地保存在 worker 中。

这就是为什么我的循环不起作用的原因。

于 2019-07-02T14:13:51.007 回答