基于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列的主要内容,如果未能解决你的问题,请参考以下文章

根据 s-s-rS 中另一列的值更改数字格式

如何根据火花DataFrame中另一列的值更改列的值

我如何基于Awk中另一列中的值求和列中的值

获取 ant.design 表列中另一列的值?

基于 Pandas 中另一列文本的特征工程师文本

如何根据R中小标题中另一列指示的列的值添加列