Отображение столбца RDD на основе значения другого столбца в Scala - PullRequest
0 голосов
/ 30 октября 2019

Я новичок здесь. Я работаю с Spark 2.4.4 и Scala.

У меня есть СДР с тремя столбцами с первой записью, подобной этой:

(String, Double, String) = (100,10,neg)

СДР имеет тысячи записей. Я хочу изменить значение double на отрицательное значение, когда в той же строке есть 'neg', и ничего не делать, когда есть какая-либо другая фраза. Я хочу получить следующий вывод:

(String, Double) = (100,-10)

Я полагал, что функция карты будет работать для этого, чтобы создать новый СДР, но если есть другая опция, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 30 октября 2019

Если у вас есть все необходимые данные для одного и того же элемента, вы можете использовать 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)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...