数据框的每一行都有CSV内容。
我正在努力将每一行保存在不同的特定表中。
我相信我需要使用foreach或UDF来完成此操作,但这根本行不通。
我设法找到的所有内容就像使用.collect()(我真的不想使用)在foreach或代码中的简单打印一样。
我还找到了重新分配的方式,但这不允许我选择每一行的位置。
rows = df.count()
df.repartition(rows).write.csv('save-dir')
您能给我一个简单而可行的例子吗?
答案 0 :(得分:0)
将每一行保存为表是一项昂贵的操作,不建议这样做。但是,您正在尝试的目标可以这样实现-
df.write.format("delta").partitionBy("<primary-key-column>").save("/delta/save-dir")
现在,每一行将被保存为.parquet
格式,您可以从每个分区创建外部表。只有在每一行都有唯一值(即主键)的情况下,这才起作用。
答案 1 :(得分:0)
总之,一如既往,这很简单,但我看不出有任何问题。
基本上,当您执行foreach时,要保存的数据帧是在循环内部构建的。工作程序不同于驱动程序,不会在保存时自动设置“ / dbfs /”路径,因此,如果您不手动添加“ / dbfs /”,它将在工作程序中本地保存数据。
这就是为什么我的循环无法正常工作的原因。
答案 2 :(得分:0)
您尝试过.mode("append").repartionBy("ID")
,它将为每个ID创建一个目录,然后别忘了设置模式