簡體   English   中英

如何在 ipython 中將 Spark RDD 轉換為 Pandas 數據幀?

[英]How to convert Spark RDD to pandas dataframe in ipython?

我有一個RDD ,我想將它轉換為pandas dataframe 我知道我們可以將RDD轉換為普通dataframe

df = rdd1.toDF()

但我想的轉換RDDpandas dataframe和不正常的dataframe 我該怎么做?

您可以使用函數toPandas()

將此 DataFrame 的內容作為 Pandas pandas.DataFrame 返回。

這僅在 Pandas 已安裝且可用時才可用。

>>> df.toPandas()  
   age   name
0    2  Alice
1    5    Bob

您必須使用 Spark DataFrame 作為 RDD 和所需 Pandas DataFrame 之間的中間步驟。

例如,假設我有一個已讀入 RDD 的文本文件flights.csv

flights = sc.textFile('flights.csv')

您可以檢查類型:

type(flights)
<class 'pyspark.rdd.RDD'>

如果你只是在 RDD 上使用toPandas() ,它是行不通的。 根據 RDD 中對象的格式,可能需要先進行一些處理才能轉到 Spark DataFrame。 在這個例子中,這段代碼完成了這項工作:

# RDD to Spark DataFrame
sparkDF = flights.map(lambda x: str(x)).map(lambda w: w.split(',')).toDF()

#Spark DataFrame to Pandas DataFrame
pdsDF = sparkDF.toPandas()

您可以檢查類型:

type(pdsDF)
<class 'pandas.core.frame.DataFrame'>

我推薦 joshlk 的一個快速版本的 toPandas

 import pandas as pd def _map_to_pandas(rdds): """ Needs to be here due to pickling issues """ return [pd.DataFrame(list(rdds))] def toPandas(df, n_partitions=None): """ Returns the contents of `df` as a local `pandas.DataFrame` in a speedy fashion. The DataFrame is repartitioned if `n_partitions` is passed. :param df: pyspark.sql.DataFrame :param n_partitions: int or None :return: pandas.DataFrame """ if n_partitions is not None: df = df.repartition(n_partitions) df_pand = df.rdd.mapPartitions(_map_to_pandas).collect() df_pand = pd.concat(df_pand) df_pand.columns = df.columns return df_pand

 <script src="https://gist.github.com/joshlk/871d58e01417478176e7.js"></script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM