我是这里的初学者。我正在使用Spark 2.4.4和Scala。
我有一个三列的RDD,第一个条目是这样的:
(String, Double, String) = (100,10,neg)
RDD有数千个条目。我想在同一行中有'neg'时将double的值更改为负值,而在有其他短语时不执行任何操作。我想得到以下输出:
(String, Double) = (100,-10)
我认为map函数可以用于创建新的RDD,但是如果还有其他选择,请告诉我。
答案 0 :(得分:0)
当所有必需的数据都放在同一项目上时,可以使用map
进行数据转换。
val yourRDD = spark.sparkContext.parallelize(Seq(
("10", 2.0, "neg"),
("50", 6.0, "other"),
("40", -5.0, "neg"),
("100", 1.0, ""))) // Sample data
// org.apache.spark.rdd.RDD[(String, Double, String)]
val updatedRDD = yourRDD.map(item=>{
val tag = item._3 // position of your tag
val outputValue = if(tag.equals("neg") && item._2>0) item._2 * -1 // only if your tag is 'neg' and the value is possitive
else item._2
(item._1 ,outputValue)
})
// Output data: ((10,-2.0), (50,6.0), (40,-5.0), (100,1.0))