DataFrame и DataSet - преобразование значений в пару <k, v> - PullRequest
0 голосов
/ 20 января 2019

Пример ввода (черный текст) и Вывод (красный текст)

У меня есть DataFrame (один в черном), как я могу преобразовать его в один, как в красном? (номер столбца, значение)

[Изображение прилагается]

val df = spark.read.format("csv").option("inferSchema", "true").option("header", "true").load("file:/home/hduser/Desktop/Demo.csv")

case class Employee(EmpId: String, Experience: Double, Salary: Double)

val ds = df.as[Employee]

Мне нужно решение как в DataFrame, так и в DataSet.

СпасибоВы заранее!: -)

1 Ответ

0 голосов
/ 20 января 2019

Я считаю, что это структура, которую вы хотите, когда вы говорите, пара.проверьте, если приведенный ниже код дает ожидаемый результат.

С DataFrame:

import spark.sqlContext.implicits._
import org.apache.spark.sql.functions._
val data = Seq(("111",5,50000),("222",6,60000),("333",7,60000))
val df = data.toDF("EmpId","Experience","Salary")

val newdf = df.withColumn("EmpId", struct(lit("1").as("key"),col("EmpId").as("value")))
  .withColumn("Experience", struct(lit("2").as("key"),col("Experience").as("value")))
  .withColumn("Salary", struct(lit("3").as("key"),col("Salary").as("value")))
  .show(false)

output:

+--------+----------+----------+
|EmpId   |Experience|Salary    |
+--------+----------+----------+
|[1, 111]|[2, 5]    |[3, 50000]|
|[1, 222]|[2, 6]    |[3, 60000]|
|[1, 333]|[2, 7]    |[3, 60000]|
+--------+----------+----------+

С набором данных:

Сначала вам нужночтобы определить класс дела для новой структуры, иначе вы не можете создать набор данных

case class Employee2(EmpId: EmpData, Experience: EmpData, Salary: EmpData)
case class EmpData(key: String,value:String)

val ds = df.as[Employee]
val newDS = ds.map(rec=>{
  (EmpData("1",rec.EmpId), EmpData("2",rec.Experience.toString),EmpData("3",rec.Salary.toString))
})
val finalDS = newDS.toDF("EmpId","Experience","Salary").as[Employee2]
finalDS.show(false)

Вывод:

+--------+--------+------------+
|EmpId   |Experience|Salary    |
+--------+--------+------------+
|[1, 111]|[2, 5]  |[3, 50000]  |
|[1, 222]|[2, 6]  |[3, 60000]  |
|[1, 333]|[2, 7]  |[3, 60000]  |
+--------+--------+------------+

Спасибо

...