Python SPARK 2.2.2-连接多个RDD,导致内存不足异常。结果RDD有124列。最佳连接方法应该是什么?
我有一个文件,每个电话号码有多个值。例如:Python SPARK 2.2.2-连接多个RDD,导致内存不足异常。结果RDD有124列。最佳连接方法应该是什么?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我有一个文件,每个电话号码有多个值。例如: phone_no circle operator priority1 attribute1 attribute2 attribute3 priority2 attribute1 attribute2 attribute3 123445 delhi airtel 1.0 info1 info2 info3 1.1 info4 info5 info6 987654
phone_no circle operator priority1 attribute1 attribute2 attribute3 priority2 attribute1 attribute2 attribute3
123445 delhi airtel 1.0 info1 info2 info3 1.1 info4 info5 info6
987654 bhopal idea 1.1 info1 info2 info3 1.4 info4 info5 info6
123445 delhi airtel 1.3 info1 info2 info3 1.0 info4 info5 info6
我的预期产出是:
对于每个电话号码,选择最小P1及其对应的属性值
正如我上面的示例所述,对于电话号码123445,第1行中的P1小于第3行中的P1 1.0<1.3,因此我想从第1行中选择属性1、2和3,而第3行中的P2的值小于1.0<1.1,因此我想从第3行中选择属性值
以下是我想要的表格格式:
phone_no circle operator priority1 attribute1 attribute2 attribute3 priority2 attribute1 attribute2 attribute3
123445 delhi airtel 1.0 info1 info2 info3 1.0 info4 info5 info6
987654 bhopal idea 1.1 info1 info2 info3 1.4 info4 info5 info6
我有25个不同的优先级值,每个优先级值有4个不同的属性,所以我的总列数约为125
到目前为止,我所尝试的:
创建一个数据帧,其中电话号码作为键,每个优先级值的最小值。
创建另一个数据帧,该数据帧的值为minPriority1,并为每个电话号码创建相应的属性。
创建另一个数据帧,该数据帧的值为minPriority2,并为每个电话号码创建相应的属性。
将电话号码上的这两个数据帧连接起来,以获取完整信息并将此数据帧保存到磁盘。
我的方法的问题是,考虑到我拥有的列的数量,它不是一个好方法。请给我建议一些解决这个问题的好方法
编辑1:这是我所做的粘贴库链接:我可能会使用窗口功能:
from pyspark.sql.window import Window
import pyspark.sql.functions as spf
df = spark.createDataFrame([
(123, 1, 'a', 2, 'c'),
(123, 2, 'b', 1, 'd'),
(456, 3, 'e', 4, 'f')
], ['phone', 'priority1', 'attribute1', 'priority2', 'attribute2'])
w = Window.partitionBy('phone')
df2 = (
df
.select(
'phone',
spf.first('attribute1').over(w.orderBy('priority1')).alias('attribute1'),
spf.first('attribute2').over(w.orderBy('priority2')).alias('attribute2'),
)
)
(
df2
.groupby('phone')
.agg(*[spf.first(c).alias(c) for c in df2.columns if c != 'phone'])
.toPandas()
)
给出:
phone attribute1 attribute2
0 123 a d
1 456 e f
这是一个让读者将其模板化的练习,例如,使用列表理解来概括所有属性和优先级。您能显示代码吗?请检查上面的pastebin链接。谢谢你抽出时间。我会在周一试用,然后再给你回复。谢谢你抽出时间!这很好用!非常感谢你。实际上,我最初的问题是。我有一个旧版本的配置单元,因此无法使用merge命令。所以我想创建一个包含合并记录的文件,然后使用配置单元连接查询来获得最终结果。我已经接受了你的答案。