2017-07-31 75 views
0

我創建了一個帶有random.int方法的2列pandas df,以生成應用groupby操作的第二個兩列數據框。 df.col1是一系列列表,df.col2是一系列整數,列表中的元素是,類型爲'numpy.int64',與第二列元素相同,因爲random.int。將帶有Numpy值的pandas數據框轉換爲pysparkSQL.DataFrame

df.a  df.b 
3   7 
5   2 
1   8 
... 

groupby operations 

df.col1  df.col2 
[1,2,3...] 1 
[2,5,6...] 2 
[6,4,....] 3 
... 

當我嘗試用克里特spark.createDataFrame(DF)的pyspark.sql數據框中,我得到這個錯誤: 類型錯誤:不支持型: 'numpy.int64'。

回過頭來看看這個DF一代,我嘗試了不同的方法從numpy.int64到Python的int元素轉換,但沒有主題的工作:

np_list = np.random.randint(0,2500, size = (10000,2)).astype(IntegerType) 
df = pd.DataFrame(np_list,columns = list('ab'), dtype = 'int') 

我也試圖與拉姆達氧化物映射:INT (x)或x.item(),但類型仍然是'numpy.int64'。

根據pyspark.sql文檔,應該可以加載一個熊貓數據框,但它似乎與numpy值不兼容。 任何提示?

謝謝!

回答

0

那麼,你如何做到這一點是行不通的。如果你有這樣的事情。由於第一列,你會得到錯誤。 Spark不明白類型爲numpy.int64的列表

​​3210

如果你有類似的東西。這應該沒問題。

df.a  df.b 
3   7 
5   2 
1   8 

在代碼方面,試試這個:

np_list = np.random.randint(0,2500, size = (10000,2)) 
df = pd.DataFrame(np_list,columns = list('ab')) 
spark_df = spark.createDataFrame(df) 

你並不真的需要再次施放此爲int,如果你想明確地做到這一點,那麼它是array.astype(int)。然後就做spark_df.head。這應該工作!

+0

Thanks @DatTran,that works。然而,我想轉換的DF是第一個(女巫專欄co1和col2和列表)不是第二個;這就是爲什麼我試圖強制從其他數據框中的'numpy.int64'轉換爲'python int'。 – csbr

+0

正如我所說這是不可能的!否則,你必須把它作爲一個「字符串」。 –

+0

@csbr再次在這裏......你需要接受那些解答你的問題的答案 – eliasah

相關問題