将列字典从不同的数据帧转换为数据帧:pyspark
Convert dictionary of columns to Dataframe in from different dataframes : pyspark
我正在尝试将来自不同数据框的列合并为一个以供分析。我正在将我需要的所有列收集到字典中。
我现在有这样一本字典 -
newDFDict = {
'schoolName': school.INSTNM,
'type': school.CONTROL,
'avgCostAcademicYear': costs.COSTT4_A,
'avgCostProgramYear': costs.COSTT4_P,
'averageNetPricePublic': costs.NPT4_PUB,
}
{
'schoolName': Column<b'INSTNM'>,
'type': Column<b'CONTROL'>,
'avgCostAcademicYear': Column<b'COSTT4_A'>,
'avgCostProgramYear': Column<b'COSTT4_P'>,
'averageNetPricePublic': Column<b'NPT4_PUB'>
}
我想将此字典转换为 Pyspark 数据框。
我已经尝试过这种方法,但输出不是我所期望的 -
newDFDict = {
'schoolName': school.select("INSTNM").collect(),
'type': school.select("CONTROL").collect(),
'avgCostAcademicYear': costs.select("COSTT4_A").collect(),
'avgCostProgramYear': costs.select("COSTT4_P").collect(),
'averageNetPricePublic': costs.select("NPT4_PUB").collect(),
}
newDF = sc.parallelize([newDFDict]).toDF()
newDF.show()
+---------------------+--------------------+--------------------+--------------------+--------------------+
|averageNetPricePublic| avgCostAcademicYear| avgCostProgramYear| schoolName| type|
+---------------------+--------------------+--------------------+--------------------+--------------------+
| [[NULL], [NULL], ...|[[NULL], [NULL], ...|[[NULL], [NULL], ...|[[Community Colle...|[[1], [1], [1], [...|
+---------------------+--------------------+--------------------+--------------------+--------------------+
这可能吗?
如果可以,怎么做?
这样做正确吗?如果没有,我该如何实现?
使用 pandas 不是一个选项,因为数据非常大 (2-3 GB),而 pandas 太慢了。我在本地机器上 运行 pyspark。
提前致谢! :)
这是我建议的 2 个选项
Option1(联合案例构建字典):
你说过,你有 >=10 个表(你想从中构建字典),其中有公共列(例如 'schoolName','type' 'avgCostAcademicYear' ,'avgCostProgramYear' , 'averageNetPricePublic' 是常见的列)然后你可以去 union 或 unionByName 形成单一合并。查看数据。
例如:
select 'schoolName','type' 'avgCostAcademicYear' ,'avgCostProgramYear' , 'averageNetPricePublic' from df1
union
select 'schoolName','type' 'avgCostAcademicYear' ,'avgCostProgramYear' , 'averageNetPricePublic' from df2
....
union
select 'schoolName','type' 'avgCostAcademicYear' ,'avgCostProgramYear' , 'averageNetPricePublic' from dfN
将为您提供字典的综合视图
选项 2:(如果您只有公共连接列)
如果您有一些常见的连接列,那么无论有多少表,您也可以使用标准连接..
对于伪 sql 示例:
select dictionary columns from table1,table2,table3,... tablen where join common columns in all tables (table1... tablen)
注意错过任何连接列将导致笛卡尔积
我正在尝试将来自不同数据框的列合并为一个以供分析。我正在将我需要的所有列收集到字典中。
我现在有这样一本字典 -
newDFDict = {
'schoolName': school.INSTNM,
'type': school.CONTROL,
'avgCostAcademicYear': costs.COSTT4_A,
'avgCostProgramYear': costs.COSTT4_P,
'averageNetPricePublic': costs.NPT4_PUB,
}
{
'schoolName': Column<b'INSTNM'>,
'type': Column<b'CONTROL'>,
'avgCostAcademicYear': Column<b'COSTT4_A'>,
'avgCostProgramYear': Column<b'COSTT4_P'>,
'averageNetPricePublic': Column<b'NPT4_PUB'>
}
我想将此字典转换为 Pyspark 数据框。
我已经尝试过这种方法,但输出不是我所期望的 -
newDFDict = {
'schoolName': school.select("INSTNM").collect(),
'type': school.select("CONTROL").collect(),
'avgCostAcademicYear': costs.select("COSTT4_A").collect(),
'avgCostProgramYear': costs.select("COSTT4_P").collect(),
'averageNetPricePublic': costs.select("NPT4_PUB").collect(),
}
newDF = sc.parallelize([newDFDict]).toDF()
newDF.show()
+---------------------+--------------------+--------------------+--------------------+--------------------+
|averageNetPricePublic| avgCostAcademicYear| avgCostProgramYear| schoolName| type|
+---------------------+--------------------+--------------------+--------------------+--------------------+
| [[NULL], [NULL], ...|[[NULL], [NULL], ...|[[NULL], [NULL], ...|[[Community Colle...|[[1], [1], [1], [...|
+---------------------+--------------------+--------------------+--------------------+--------------------+
这可能吗? 如果可以,怎么做?
这样做正确吗?如果没有,我该如何实现?
使用 pandas 不是一个选项,因为数据非常大 (2-3 GB),而 pandas 太慢了。我在本地机器上 运行 pyspark。
提前致谢! :)
这是我建议的 2 个选项
Option1(联合案例构建字典):
你说过,你有 >=10 个表(你想从中构建字典),其中有公共列(例如 'schoolName','type' 'avgCostAcademicYear' ,'avgCostProgramYear' , 'averageNetPricePublic' 是常见的列)然后你可以去 union 或 unionByName 形成单一合并。查看数据。
例如:
select 'schoolName','type' 'avgCostAcademicYear' ,'avgCostProgramYear' , 'averageNetPricePublic' from df1
union
select 'schoolName','type' 'avgCostAcademicYear' ,'avgCostProgramYear' , 'averageNetPricePublic' from df2
....
union
select 'schoolName','type' 'avgCostAcademicYear' ,'avgCostProgramYear' , 'averageNetPricePublic' from dfN
将为您提供字典的综合视图
选项 2:(如果您只有公共连接列)
如果您有一些常见的连接列,那么无论有多少表,您也可以使用标准连接..
对于伪 sql 示例:
select dictionary columns from table1,table2,table3,... tablen where join common columns in all tables (table1... tablen)
注意错过任何连接列将导致笛卡尔积