Добавить новые столбцы в RDD - PullRequest
2 голосов
/ 25 мая 2020

Ошибка Привет, я пытаюсь создать новый столбец в Spark RDD. Я пытаюсь использовать набор данных, в который я хочу добавить процент игр, созданных издателем, во всех играх. Набор данных выглядит следующим образом:

Имя, Платформа, Год, Жанр, Издатель, NA_Sales, EU_Sales, JP_Sales, Other_Sales

val vgdataLines = sc.textFile("hdfs:///user/ashhall1616/bdc_data/t1/vgsales-small.csv")
val vgdata = vgdataLines.map(_.split(";"))
def toPercentage(x: Double): Double = {x * 100} val countPubl  = vgdata.map(r =>  (r(4),1)).reduceByKey(_+_)
val addpercen = countPubl.withColumn("count", toPercentage($"count"/countPubl.count(_._2)))

Я использовал withColumn(), чтобы добавить счетчик нового столбца 'и ожидаемый результат будет таким:

(Ubisoft,3,15.0)

Может ли кто-нибудь сказать, что здесь не так?

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Вы не можете использовать withColumn с RDD. Вы можете сделать следующее:

val addpercen = countPubl.map({case(key, value) => (key, value, toPercentage(value))})

использовать карту, чтобы добавить вычисленное значение в качестве нового столбца и преобразовать его в DataFrame, если хотите

import spark.implicits._
val myDf = addpercen.toDF("key","value","myNewColumn") 

myDf.show()

Надеюсь, это поможет.

1 голос
/ 25 мая 2020

Вы не можете использовать withColumn с RDD, поэтому преобразуйте его в DataFrame, как показано ниже, а затем используйте

val countPubl : DataFrame  = vgdata.map(r =>  (r(4),1)).reduceByKey(_+_).toDF()

Если вы все еще хотите использовать RDD, просто конвертируйте его обратно в RDD после добавления столбец with как

val javaRdd : JavaRDD[Row] = countPubl.withColumn("...",col("...")).toJavaRDD
...