根据规则拆分spark DataFrame的最有效方法



我正在尝试以最有效的方式拆分DataFrame(约200M行(。这里有一个测试样本来解释:

df.show()
+----+------+--------+
| id | size | weight |         
+----+------+--------+
| 1  | 10   |  200   |
| 2  | 50   |  100   |
| 3  | 75   |  300   |
+----+------+--------+

我正试图根据过滤器将这个数据帧拆分为两个集,比如一个有效的错误文件(或者至少直接保存到我的hdfs中作为镶木地板文件(,例如大小>50&重量>300,这样我就可以在那个过滤器上拆分我的数据帧。

我的第一直觉是根据不同的过滤器创建一个布尔列(0,1(,然后将这些新列相加,最终应用过滤器>0和==0来创建我的2个集合。

这是一种有效的方法吗?还是你认为有更好的解决方案?

是的,你提出的想法听起来不错。接下来,一旦您定义了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()

最新更新