更改Spark数据集<row>中的值

时间:2018-04-06 02:52:23

标签: java apache-spark-sql

我有一个Spark数据集,我需要做的是循环遍历此数据集的所有行中的所有值,并在满足某些条件时更改该值。

例如,我想将大于5的所有值更改为0.因此,我遍历数据集并将值更改为0.

我的问题是我找不到更改数据集中值的方法。无论如何都要在Java中这样做。

2 个答案:

答案 0 :(得分:1)

您可以在数据框中使用withColumnselect函数或在spark中使用数据集

这是你在scala中的方法,我希望你能用Java转换它

//dummy dataframe with two column id and value
val df = Seq(
  ("a", 1),
  ("b", 4),
  ("c", 2),
  ("d", 6),
  ("e", 10),
  ("f", 11)
).toDF("id", "value")

//Now this will change the all value with greater than 5 to 0
val newDF = df.withColumn("value", when($"value" > 5, 0).otherwise($"value"))

select

相同
val newDF = df.select($"id", when($"value" > 5, 0).otherwise($"value").as("value"))

输出:

+---+-----+
|id |value|
+---+-----+
|a  |1    |
|b  |4    |
|c  |2    |
|d  |0    |
|e  |0    |
|f  |0    |
+---+-----+

我希望这有帮助!

答案 1 :(得分:1)

根据Shankar Koirala的建议,以下是相同的Java解决方案:

dataSet = dataSet.withColumn("value",when(col("value").gt(5),0).otherwise(col("value")));