Python 3.x 根据规则分割spark数据帧的最有效方法
我正试图以最有效的方式拆分数据帧(约2亿行)。 以下是一个测试样本,用于解释:Python 3.x 根据规则分割spark数据帧的最有效方法,python-3.x,apache-spark,pyspark,Python 3.x,Apache Spark,Pyspark,我正试图以最有效的方式拆分数据帧(约2亿行)。 以下是一个测试样本,用于解释: df.show() +----+------+--------+ | id | size | weight | +----+------+--------+ | 1 | 10 | 200 | | 2 | 50 | 100 | | 3 | 75 | 300 | +----+------+--------+ 我正试图根据过滤器(例如,大小>50&重量>300)将
df.show()
+----+------+--------+
| id | size | weight |
+----+------+--------+
| 1 | 10 | 200 |
| 2 | 50 | 100 |
| 3 | 75 | 300 |
+----+------+--------+
我正试图根据过滤器(例如,大小>50&重量>300)将此数据帧拆分为两组,就像一个有效和错误文件(或者至少将其作为拼花文件直接保存到我的hdfs),这样我就可以在该过滤器上拆分我的数据帧
我的第一个直觉是根据不同的过滤器创建一个布尔列(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()