pyspark 如何通过交替行来合并两个spark Dataframe ?如果顺序应该是“斐波纳契式”呢?

lnxxn5zx  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(158)

我正在使用PySpark。我有两个 Dataframe ,A和B,我想得到一个新的 Dataframe ,其中
第1行是A第1行,
第2行是B中的第1行
第3行是A中的第2行
第4行是B的第2行
第5行是A的第3行...
该解决方案还应处理数据框长度不同时的情况。首先是交替的行,然后在数据框的末尾添加较长的列表。
另外,我想测试一下斐波那契数列是否优于这种交替数列。我的意思是,行将来自不同的 Dataframe ,如ABABAABAAAB。这里的A数来自斐波那契数列。

6ie5vjzr

6ie5vjzr1#

在pysark Dataframe 中没有顺序,第一行没有意义。但是我假设您有一个列“row_number”,它标识每行的索引。您可以做一个技巧,将a和b Dataframe 的行号乘以2,然后将1加到b Dataframe 的行号,合并a和b Dataframe ,最后进行新的行号。

from pyspark.sql import functions as F
from pyspark.sql import Window as W

a_df.show()
+----------+---+
|row_number|col|
+----------+---+
|         1|  a|
|         2|  b|
|         3|  c|
+----------+---+
b_df.show()
+----------+---+
|row_number|col|
+----------+---+
|         1|  d|
|         2|  e|
|         3|  f|
|         4|  g|
|         5|  h|
+----------+---+

(
    a_df
    .withColumn('new_row_number', F.col('row_number')*2 - 1)
    .union(
        b_df
        .withColumn('new_row_number', F.col('row_number')*2))
    .withColumn(
        'new_row_number', 
        F.row_number()
        .over(W.orderBy('new_row_number')))
).show()

+----------+---+--------------+
|row_number|col|new_row_number|
+----------+---+--------------+
|         1|  a|             1|
|         1|  d|             2|
|         2|  b|             3|
|         2|  e|             4|
|         3|  c|             5|
|         3|  f|             6|
|         4|  g|             7|
|         5|  h|             8|
+----------+---+--------------+

相关问题