Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在PySpark数据帧中创建记录对_Python_Pyspark - Fatal编程技术网

Python 在PySpark数据帧中创建记录对

Python 在PySpark数据帧中创建记录对,python,pyspark,Python,Pyspark,我有一个PySpark数据框,看起来像: +---+---+---+ | x| y| z| +---+---+---+ | A| 1| 2| | B| 3| 4| | C| 5| 6| | D| 7| 8| +---+---+---+ 我想要一个结果数据帧,它包含两个记录对,每个记录对每个记录,除了它自身存在于上述数据帧中之外。不应该有重复的对。例如,如果出现A-B和B-A,则仅保留A-B 对于上述数据帧,对数应等于lendf*lendf-1/2=6 预期产出:

我有一个PySpark数据框,看起来像:

+---+---+---+
|  x|  y|  z|
+---+---+---+
|  A|  1|  2|
|  B|  3|  4|
|  C|  5|  6|
|  D|  7|  8|
+---+---+---+
我想要一个结果数据帧,它包含两个记录对,每个记录对每个记录,除了它自身存在于上述数据帧中之外。不应该有重复的对。例如,如果出现A-B和B-A,则仅保留A-B

对于上述数据帧,对数应等于lendf*lendf-1/2=6

预期产出:

+---+---+---+---+---+---+
|x_1|y_1|z_1|x_2|y_2|z_2|
+---+---+---+---+---+---+
|  A|  1|  2|  B|  3|  4|
|  A|  1|  2|  C|  5|  6|
|  A|  1|  2|  D|  7|  8|
|  B|  3|  4|  C|  5|  6|
|  B|  3|  4|  D|  7|  8|
|  C|  5|  6|  D|  7|  8|
+---+---+---+---+---+---+
在PySpark中如何执行此操作?有没有像自连接或笛卡尔积这样的连接?谢谢

-编辑-

我能够做交叉连接,得到所有16对

temp2 = temp.withColumnRenamed('x', 'x_1').crossJoin(temp.withColumnRenamed('x', 'x_2'))
temp2.orderBy(['x_1', 'x_2'], ascending = [True, True]).show()
输出:

+---+---+---+---+---+---+
|x_1|  y|  z|x_2|  y|  z|
+---+---+---+---+---+---+
|  A|  1|  2|  A|  1|  2|
|  A|  1|  2|  B|  3|  4|
|  A|  1|  2|  C|  5|  6|
|  A|  1|  2|  D|  7|  8|
|  B|  3|  4|  A|  1|  2|
|  B|  3|  4|  B|  3|  4|
|  B|  3|  4|  C|  5|  6|
|  B|  3|  4|  D|  7|  8|
|  C|  5|  6|  A|  1|  2|
|  C|  5|  6|  B|  3|  4|
|  C|  5|  6|  C|  5|  6|
|  C|  5|  6|  D|  7|  8|
|  D|  7|  8|  A|  1|  2|
|  D|  7|  8|  B|  3|  4|
|  D|  7|  8|  C|  5|  6|
|  D|  7|  8|  D|  7|  8|
+---+---+---+---+---+---+

但我不想要多余的和自我配对

此任务需要非等连接,这在性能方面非常糟糕。 我希望你的台词不要太多

从pyspark.sql导入函数为F,窗口为w a=[ A、 1,2,, B、 3,4,, C、 5,6, D、 7,8, ] b=x y z df=spark.createDataFramea,b df_2=df.withColumn 注意, F.row_编号.OVR.orderByx df_final=df_2.aliasdf_l.crossJoindf_2.aliasdf_r df_final.wheredf_l.nb是的,我有数百万张唱片。