如何根据行号列表拆分pyspark数据帧的行?

时间:2019-04-17 19:13:31

标签: list sorting pyspark apache-spark-sql

我创建了一个pyspark数据框,其外观看起来像这样:-

>>> df

f1 | f2 | ... | fn | row_num
------------------------------
10 | 50 | ... |100 |    1
20 | 50 | ... |200 |    2
30 | 50 | ... |300 |    3
40 | 50 | ... |400 |    4
50 | 50 | ... |500 |    5

然后我还创建了随机的行号列表,如下所示:-

my_list = [[2, 5],[4, 1, 3]]

根据此列表的结构,我希望按如下方式创建pyspark数据帧:-

>>> split_df[0]

    f1 | f2 | ... | fn | row_num
    ------------------------------
    20 | 50 | ... |200 |    2
    50 | 50 | ... |500 |    5

>>> split_df[1]

    f1 | f2 | ... | fn | row_num
    ------------------------------
    40 | 50 | ... |400 |    4
    10 | 50 | ... |100 |    1
    30 | 50 | ... |300 |    3

如何根据行号df拆分my_list

我不希望使用df.RandomSplit()方法。

1 个答案:

答案 0 :(得分:2)

似乎您想根据my_list的值将DataFrame分成一个列表。

您可以在列表理解中使用pyspark.sql.Column.isin

from pyspark.sql.functions import col
split_df = [df.where(col('row_num').isin(x)) for x in my_list]