我想将单个DataFrame保存为2个不同的csv文件(拆分DataFrame) - 其中一个只包含头,另一个包含其余的行。Pyspark - 将数据帧写入2个不同的csv文件
我想将2个文件保存在同一目录下,所以如果可能的话,Spark处理所有逻辑将是最好的选择,而不是使用pandas分割csv文件。
什么是最有效的方法来做到这一点?
感谢您的帮助!
我想将单个DataFrame保存为2个不同的csv文件(拆分DataFrame) - 其中一个只包含头,另一个包含其余的行。Pyspark - 将数据帧写入2个不同的csv文件
我想将2个文件保存在同一目录下,所以如果可能的话,Spark处理所有逻辑将是最好的选择,而不是使用pandas分割csv文件。
什么是最有效的方法来做到这一点?
感谢您的帮助!
我们假设你有一个名为“df”的数据集。
您可以: 方案一:写两次:
df.write.(...).option("header", "false").csv(....)
df.take(1).option("header", "true").csv() // as far as I remember, someone had problems with saving DataFrame without rows -> you must write at least one row and then manually cut this row using normal Java or Python file API
或者你可以用头= true,然后手工切割头,并使用标准的Java API将其放置在新文件中写一次
感谢您的回答。还有一个问题,是不是Spark将2个文件写入不同的目录?是否可以将它们保存在同一目录中? – Young
第二行不会写2行吗? 'take(1)'会取第一行数据,'header,true'会写头文件? – philantrovert
@Young您应该写入单独的文件夹,然后移动文件。不幸的是,文件是按照DataFrame的形式进行分区的。如果要将所有内容保存在一个文件中,请记住使用'repartition(1)' –
数据,而无需首标:
df.to_csv("filename.csv", header=False)
接头,而没有数据:
df_new = pd.DataFrame(data=None, columns=df_old.columns) # data=None makes sure no rows are copied to the new dataframe
df_new.to_csv("filename.csv")
它可以,但 - 根据JavaDoc .. PythonDoc? ;)“ .. note ::这个方法应该只在结果熊猫的DataFrame很小时使用,因为所有的数据都被加载到驱动程序的内存中。” –
是的,你是对的! – RetardedJoker
只要做一个子进程调用,然后用bash来做。应该更容易。 – philantrovert
@philantrovert处理〜1TB文件,例如可能会很慢,即使有bash;) –