当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PySpark DataFrame转Dictionary用法及代码示例


在本文中,我们将了解如何将 PySpark DataFrame 转换为字典,其中键是列名称,值是列值。

在开始之前,我们将创建一个示例 DataFrame :

Python3


# Importing necessary libraries 
from pyspark.sql import SparkSession 
  
# Create a spark session 
spark = SparkSession.builder.appName('DF_to_dict').getOrCreate() 
  
# Create data in dataframe 
data = [(('Ram'), '1991-04-01', 'M', 3000), 
        (('Mike'), '2000-05-19', 'M', 4000), 
        (('Rohini'), '1978-09-05', 'M', 4000), 
        (('Maria'), '1967-12-01', 'F', 4000), 
        (('Jenis'), '1980-02-17', 'F', 1200)] 
  
# Column names in dataframe 
columns = ["Name", "DOB", "Gender", "salary"] 
  
# Create the spark dataframe 
df = spark.createDataFrame(data=data, 
                           schema=columns) 
  
# Print the dataframe 
df.show() 

输出:

方法1:使用df.toPandas()

使用 df.toPandas() 将 PySpark 数据帧转换为 Pandas 数据帧。

用法:DataFrame.toPandas()

返回类型:返回与 Pyspark Dataframe 内容相同的 pandas DataFrame 。

获取每个列值并将值列表添加到以列名作为键的字典中。

Python3


# Declare an empty Dictionary 
dict = {} 
  
# Convert PySpark DataFrame to Pandas  
# DataFrame 
df = df.toPandas() 
  
# Traverse through each column 
for column in df.columns: 
  
    # Add key as column_name and 
    # value as list of column values 
    dict[column] = df[column].values.tolist() 
  
# Print the dictionary 
print(dict) 

输出:

{‘Name’: [‘Ram’, ‘Mike’, ‘Rohini’, ‘Maria’, ‘Jenis’], 

‘DOB’: [‘1991-04-01’, ‘2000-05-19’, ‘1978-09-05’, ‘1967-12-01’, ‘1980-02-17’],

 ‘Gender’: [‘M’, ‘M’, ‘M’, ‘F’, ‘F’], 

 ‘salary’: [3000, 4000, 4000, 4000, 1200]}

方法2:使用df.collect()

将PySpark DataFrame 转换为行列表,并以列表形式返回 DataFrame 的所有记录。

用法:DataFrame.collect()

返回类型:以行列表的形式返回 DataFrame 的所有记录。

Python3


import numpy as np 
  
# Convert the dataframe into list 
# of rows 
rows = [list(row) for row in df.collect()] 
  
# COnvert the list into numpy array 
ar = np.array(rows) 
  
# Declare an empty dictionary 
dict = {} 
  
# Get through each column 
for i, column in enumerate(df.columns): 
  
    # Add ith column as values in dict 
    # with key as ith column_name 
    dict[column] = list(ar[:, i]) 
  
# Print the dictionary 
print(dict) 

输出:

{‘Name’: [‘Ram’, ‘Mike’, ‘Rohini’, ‘Maria’, ‘Jenis’], 

‘DOB’: [‘1991-04-01’, ‘2000-05-19’, ‘1978-09-05’, ‘1967-12-01’, ‘1980-02-17’], 

‘Gender’: [‘M’, ‘M’, ‘M’, ‘F’, ‘F’],

 ‘salary’: [‘3000’, ‘4000’, ‘4000’, ‘4000’, ‘1200’]}

方法3:使用pandas.DataFrame.to_dict()

Pandas DataFrame 可以使用to_dict()方法直接转换为字典

用法:DataFrame.to_dict(orient=’dict’,)

参数:

  • orient: 指示字典值的类型。它采用诸如 {‘dict’, ‘list’, ‘series’, ‘split’, ‘records’, ‘index’} 之类的值

Return type: 返回字典 对应 DataFrame 。

代码:

Python3


# COnvert PySpark dataframe to pandas 
# dataframe 
df = df.toPandas() 
  
# Convert the dataframe into  
# dictionary 
dict = df.to_dict(orient = 'list') 
  
# Print the dictionary 
print(dict) 

输出:

{‘Name’: [‘Ram’, ‘Mike’, ‘Rohini’, ‘Maria’, ‘Jenis’], 

‘DOB’: [‘1991-04-01’, ‘2000-05-19’, ‘1978-09-05’, ‘1967-12-01’, ‘1980-02-17’], 

‘Gender’: [‘M’, ‘M’, ‘M’, ‘F’, ‘F’],

 ‘salary’: [3000, 4000, 4000, 4000, 1200]}

将具有 2 列的 DataFrame 转换为字典,创建一个具有 2 列的 DataFrame ,命名为“Location”和“House_price”

Python3


# Importing necessary libraries 
from pyspark.sql import SparkSession 
  
# Create a spark session 
spark = SparkSession.builder.appName('DF_to_dict').getOrCreate() 
  
# Create data in dataframe 
data = [(('Hyderabad'), 120000), 
        (('Delhi'), 124000), 
        (('Mumbai'), 344000), 
        (('Guntur'), 454000), 
        (('Bandra'), 111200)] 
  
# Column names in dataframe 
columns = ["Location", 'House_price'] 
  
# Create the spark dataframe 
df = spark.createDataFrame(data=data, schema=columns) 
  
# Print the dataframe 
print('Dataframe : ') 
df.show() 
  
# COnvert PySpark dataframe to  
# pandas dataframe 
df = df.toPandas() 
  
# Convert the dataframe into  
# dictionary 
dict = df.to_dict(orient='list') 
  
# Print the dictionary 
print('Dictionary :') 
print(dict) 

输出:



相关用法


注:本文由纯净天空筛选整理自ManikantaBandla大神的英文原创作品 Convert PySpark DataFrame to Dictionary in Python。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。