2016-08-03 313 views
2

我需要在Spark DataFrame上進行分佈式計算,調用DataFrame的塊上的一些任意(而非SQL)邏輯。 我所做的:Spark DataFrame mapPartitions

def some_func(df_chunk): 
    pan_df = df_chunk.toPandas() 
    #whatever logic here 

df = sqlContext.read.parquet(...) 
result = df.mapPartitions(some_func) 

可惜的是它會導致:

AttributeError: 'itertools.chain' object has no attribute 'toPandas'

我預計將有每個地圖調用中的火花數據幀的對象,而不是我得到了「itertools.chain」。爲什麼?以及如何克服這一點?

+2

PySpark使用itertools.chain將數據傳遞到mapPartition,因此要傳遞這個對象,它不能識別的功能。 –

回答

2

試試這個:

>>> columns = df.columns 
>>> df.rdd.mapPartitions(lambda iter: [pd.DataFrame(list(iter), columns=columns)])