python3.x—根据规则分割sparkDataframe的最有效方法

erhoui1w  于 2021-05-17  发布在  Spark
关注(0)|答案(1)|浏览(550)

我正在尝试以最有效的方式拆分Dataframe(约2亿行)。下面是一个测试样本来解释:

df.show()

+----+------+--------+
| id | size | weight |         
+----+------+--------+
| 1  | 10   |  200   |
| 2  | 50   |  100   |
| 3  | 75   |  300   |
+----+------+--------+

我正在尝试将此Dataframe拆分为两组,例如一个有效和错误文件(或者至少作为Parquet文件直接保存到我的hdfs),具体取决于过滤器,例如,size>50&weight>300,因此我可以在该过滤器上拆分我的Dataframe。
我的第一个直觉是根据不同的过滤器创建一个布尔列(0,1),然后对这些新列求和,最后应用过滤器>0和==0来创建我的2个集合。
这是一个有效的方法还是你认为有更好的解决方案?

xn1cxnb4

xn1cxnb41#

是的,你提议的主意听起来不错。一旦你定义了 df ,我建议使用如下代码:

import org.apache.spark.sql.functions as F

df2 = df.withColumn("Check_Column", F.when((F.col("size") > 50) && (F.col("weight") > 300),F.lag(1)).otherwise(0))
df2.show()

上面将添加一个新列,其中包含与您的条件是否满足相对应的布尔项。然后,我会过滤掉这些结果,以便创建您要查找的两个数据集:

df_True = df2.filter(df2.Check_Column == 1)
df_True.show()

df_False = df2.filter(df2.Check_Column == 0)
df_False.show()

相关问题