2017-09-13 150 views
1

我想將單個DataFrame保存爲2個不同的csv文件(拆分DataFrame) - 其中一個只包含頭,另一個包含其餘的行。Pyspark - 將數據幀寫入2個不同的csv文件

我想將2個文件保存在同一目錄下,所以如果可能的話,Spark處理所有邏輯將是最好的選擇,而不是使用pandas分割csv文件。

什麼是最有效的方法來做到這一點?

感謝您的幫助!

+0

只要做一個子進程調用,然後用bash來做。應該更容易。 – philantrovert

+0

@philantrovert處理〜1TB文件,例如可能會很慢,即使有bash;) –

回答

2

我們假設你有一個名爲「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將其放置在新文件中寫一次

+0

感謝您的回答。還有一個問題,是不是Spark將2個文件寫入不同的目錄?是否可以將它們保存在同一目錄中? – Young

+0

第二行不會寫2行嗎? 'take(1)'會取第一行數據,'header,true'會寫頭文件? – philantrovert

+0

@Young您應該寫入單獨的文件夾,然後移動文件。不幸的是,文件是按照DataFrame的形式進行分區的。如果要將所有內容保存在一個文件中,請記住使用'repartition(1)' –

0

數據,而無需首標:

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") 
+0

它可以,但 - 根據JavaDoc .. PythonDoc? ;)「 .. note ::這個方法應該只在結果熊貓的DataFrame很小時使用,因爲所有的數據都被加載到驅動程序的內存中。」 –

+0

是的,你是對的! – RetardedJoker