apache-spark - DataFrame 和 DataSet - 将值转换为一对
问题描述
我有一个 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 方式的解决方案。
先感谢您!:-)
解决方案
我相信当您说配对时,这是您想要的结构。检查下面的代码是否给出了您的预期输出。
使用数据框:
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)
输出:
+--------+----------+----------+
|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] |
+--------+--------+------------+
谢谢
推荐阅读
- r - data.table 评估 1/0 不等于 TRUE/FALSE
- node.js - NOT NULL 约束因批量插入而失败
- python - 为应用函数中处理的每一行创建一个计数器
- javascript - PHP-如何将 html 表格单元格值添加到 MYSQL 数据库
- java - 无法访问 servlet
- unity3d - HoloLens 的 Unity 开发
- vba - 使用权。不工作 带有组合框的编辑按钮
- wpf - 使用 SQL 表中的数据在 XAML 中进行 DataGrid 分组
- java - 如何在 IDEA IntelliJ 的嵌套项目中运行程序?
- javascript - Alfresco共享AMP结构,打包一个外部JS库,编译yuicompressor