2016-02-12 53 views
0

我需要隱蔽星火據幀的一列列出以後使用matplotlib火花 - 轉換數據框中列出提高性能

df.toPandas()[col_name].values.tolist() 

它看起來像有很高的性能開銷這種操作需要大約18秒 是還有其他方法可以做到這一點或改善性能?

+1

我猜的性能開銷是相當在toPandas()中,因爲這是鏈中的第一個動作。 – JiriS

+0

@JiriS我能做些什麼呢? – Yakov

+0

你在這一列中有多少數據? Spark必須將該列的所有數據發送給驅動程序(加上序列化/反序列化開銷)。你在使用kryo序列化嗎?如果不啓用它。 – JiriS

回答

4

如果你真的需要一個本地列表中沒有什麼可以做,在這裏,但一個改進是隻收集單個列不整DataFrame

df.select(col_name).flatMap(lambda x: x).collect() 
+0

它並沒有真正幫助我。也許還能做其他事情嗎? – Yakov

+0

除了放棄一個完整的想法嗎?不是真的。你爲什麼想要一個本地列表? – zero323

+0

for matplotlib也許有其他的方法 – Yakov

0

你可以這樣來做:

>>> [list(row) for row in df.collect()] 

實施例:
>>> d = [['Alice', 1], ['Bob', 2]]
>>> df = spark.createDataFrame(d, ['name', 'age'])
>>> df.show()
+-----+---+
| name|age|
+-----+---+
|Alice| 1|
| Bob| 2|
+-----+---+
>>> to_list = [list(row) for row in df.collect()]
print list
結果:[[u'Alice', 1], [u'Bob', 2]]

+0

儘管此代碼可能會回答問題,但提供有關如何解決問題和/或解決問題原因的其他上下文會提高答案的長期價值。請閱讀此[如何回答](http://stackoverflow.com/help/how-to-answer)以提供高質量的答案。 – thewaywewere