Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Scala 仅当有5个以上的值大于0时,才选择关键点和值_Scala_Apache Spark_Spark Dataframe - Fatal编程技术网

Scala 仅当有5个以上的值大于0时,才选择关键点和值

Scala 仅当有5个以上的值大于0时,才选择关键点和值,scala,apache-spark,spark-dataframe,Scala,Apache Spark,Spark Dataframe,下面是使用scala中的spark dataframe进行分组和筛选的数据: +---------------+------+--------+-------+------+------+------+------+------+--------+ | keys |num_1 |num_2 |num_3 |num_4 |num_5 |num_6 |num_7 |num_8 |num_9 | +---------------+------+--------+------

下面是使用scala中的spark dataframe进行分组和筛选的数据:

+---------------+------+--------+-------+------+------+------+------+------+--------+
|         keys  |num_1 |num_2   |num_3  |num_4 |num_5 |num_6 |num_7 |num_8 |num_9   |
+---------------+------+--------+-------+------+------+------+------+------+--------+
|              1|     0|       0|      0|     0|     0|     0|     0|     0|       0|
|              2|     0|       0|      0|     0|     0|     0|     0|     0|       0|
|              3|     0|     134|      0|     0|    44|   332|     0|   423|     111|
|              4|     0|     338|      0|     0|     0|     0|     0|     0|       0|
|              5|     0|       0|      0|     0|     0|     0|     0|     0|       0|
|              6|     0|       0|      0|     0|     0|     0|     0|     0|       0|
|              7|     0|     130|      4|    11|     0|     5|  1222|     0|       0|
|              8|     0|       1|      0|     0|     0|     0|     0|     0|       2|
从筛选的数据中,是否有一种简单的方法可以仅选择具有5个以上大于0的值的键

(例如,仅选择键3和7以及八个键中的值)


我考虑的唯一方法是逐个检查每个值(num_1、num_2、…、num_9),如果它们大于0,则对变量(例如变量“i”)进行递增。如果检查结束时变量大于5,则选择带有值的键。但这种方法似乎很冗长。

使用以下方法创建过滤条件:

df.columns.tail.map(x => when(col(x) > 0, 1).otherwise(0)).reduce(_ + _) >= 5
将大于0的值转换为1,否则转换为0。然后在所有列中使用
reduce
,以每行计算1



知道了。谢谢你的解决方案。按计划工作。我可以知道为什么df.columns.tail吗?
df.columns.tail
选择除第一列以外的所有列名,即
。我假设在查看这些值时,您不想将该列计算在内。
df.filter(df.columns.tail.map(x => when(col(x) > 0, 1).otherwise(0)).reduce(_ + _) >= 5).show

+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|keys|num_1|num_2|num_3|num_4|num_5|num_6|num_7|num_8|num_9|
+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|   3|    0|  134|    0|    0|   44|  332|    0|  423|  111|
|   7|    0|  130|    4|   11|    0|    5| 1222|    0|    0|
+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+