知道列在PySpark数据框中是否具有恒定值的最快方法

时间:2018-08-31 10:48:05

标签: dataframe pyspark

我想断言PySpark DataFrame列的值在所有行中是否都相同。例如,拥有下一个DataFrame

+----------+----------+
|    A     |    B     |
+----------+----------+
|       2.0|       0.0|
|       0.0|       0.0|
|       1.0|       0.0|
|       1.0|       0.0|
|       0.0|       0.0|
|       1.0|       0.0|
|       0.0|       0.0|
+----------+----------+

列“ A”不是常数,列“ B”是常数。

我尝试了两种方法:

1-检查stddev = 0:

df.select(stddev(col('B'))).collect()

2-获取不同的值:

df.select("B").distinct().collect()

第一种方法需要16分钟才能完成,第二种方法需要12分钟,但这只是一次执行,因此我不确定其重要性。

在PySpark中检查它的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

stdev也非常复杂,distinct也是如此。 如果您的任务是检查特定列中的所有值是否都等于某个特定变量,那么我将尝试执行类似操作。

df.filter(col('B') != your_value).count() == 0

可能是您不知道该列的值的情况。但这很容易解决,只需检索“头”值并与之进行比较:

your_value = df.select('B').first()[0]