Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 根据规则分割spark数据帧的最有效方法_Python 3.x_Apache Spark_Pyspark - Fatal编程技术网

Python 3.x 根据规则分割spark数据帧的最有效方法

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)将

我正试图以最有效的方式拆分数据帧(约2亿行)。 以下是一个测试样本,用于解释:

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()