2017-06-20 148 views
1

我是Python中的Spark和代碼的新手。我使用saveAsTextFile保存處理的數據。數據是行列表,並在保存後變成字符串。當我通過numpy.loadtxt("filename", delimiter=',')加載它們時(這種方法會自動將加載的數據轉換爲浮點數),有錯誤報告說因爲'['方括號',數據不能轉換爲浮點數。 那麼如何保存沒有方括號的行列表,或者使用那些括號,但是稍後加載並將它們正確地轉換爲浮點數?如何在Spark/Pyspark中通過saveAsTextFile保存沒有方括號的列表

對不起,我也是新來的SO。這裏是解釋爲什麼我的問題不是重複的。 鏈接列中的類似問題在Scala中,但我的是在Python中(儘管答案在Scala中)。此外,這裏有一個答案,使用replace可以很好地解決我的問題(刪除方括號的列表),但這種方法還沒有出現在類似的問題中(我不確定我的第二點是否是解釋)已爲此問題的後續觀衆評論Python版本的replace方法。

+0

爲什麼使用numpy而不是SparkCsv閱讀器?你能顯示你的輸入和Spark代碼和預期的輸出嗎? –

+0

@ cricket_007我打算使用之前編寫的tensorflow代碼來進行機器學習,所以我使用numpy加載數據。處理的數據不是太大,我不熟悉Spark,所以...... – orangedietc

+0

@ cricket_007輸入數據很大,經過處理後,它們變成了每行的[data1,data2,data3]。預期的輸出(保存到文本文件)類似於data1,data2,data3,方括號被刪除。 – orangedietc

回答

1

這裏是如果你有一個像(value1, value2)

data.map(x => x._1 + "," + x._2).saveAsTextFile(outputPath) 

數據可以使一個單一的字符串mkstring()

你可以做什麼
data.map(x=>x.mkString(",").saveAsTextFile(outputPath) 

這是一個希望你可以將其轉換爲pyspa的scala代碼RK。

希望這會有所幫助!

+0

問題是使用Python,順便提一下 –

+0

它工作。非常感謝你! – orangedietc

+0

很高興爲你工作:) –

0

您可以用分隔符Concat的列表前將其保存

data = range(30) 
rdd = sc.parallelize(zip(*[iter(data)] * 3), 1).map(lambda x: ','.join(map(str, x))) 
1

如果轉換rowstring使用toString方法,那麼[]括號加表示他們爲rows和領域將是comma分離。所以你可以做的是保存到輸出文件

df.map(row => row.toString.replace("[", "").replace("]", "").saveAsTextFile("outputPath") 

您還可以使用regex更換琴絃之前更換[]empty string

+0

問題正在使用Python,順便提一下 –

+0

感謝您的回答。但我無法在Python中找到類似toString的方法。我遵循Shankar的方法,將每個元素轉換爲字符串,並用'''將它們連接起來,它就起作用了。無論如何,謝謝你的回答。 – orangedietc

+0

@orange它就像'',「。join(data)' –

相關問題