基于Scala中另一列的值映射RDD列
Posted
技术标签:
【中文标题】基于Scala中另一列的值映射RDD列【英文标题】:Mapping RDD column based on value of another column in Scala 【发布时间】:2019-10-30 17:28:11 【问题描述】:我是这里的初学者。我正在使用 Spark 2.4.4 和 Scala。
我有一个包含三列的 RDD,第一个条目是这样的:
(String, Double, String) = (100,10,neg)
RDD 有数千个条目。当同一行中有'neg'时,我想将双精度值更改为负值,而当有任何其他短语时不执行任何操作。我想得到以下输出:
(String, Double) = (100,-10)
我认为 map 函数可以用来创建一个新的 RDD,但是如果有其他选项,请告诉我。
【问题讨论】:
【参考方案1】:当您拥有同一项所需的所有数据时,您可以使用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))
【讨论】:
以上是关于基于Scala中另一列的值映射RDD列的主要内容,如果未能解决你的问题,请参考以下文章