我想將單個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;) –