数据框架到RDD这段代码无法工作。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据框架到RDD这段代码无法工作。相关的知识,希望对你有一定的参考价值。
我试图读取数据框架的每一行,并将行数据转换为自定义Bean类。但问题是,代码没有被执行。为了检查,我写了多条打印语句,但没有一条打印语句存在于 df.rdd.map{row=>}
执行,就像整个代码块被转义一样。
代码片段。
print("data frame:", df.show()).
df.rdd.map(row => {
// Debugging
println("Debugging")
if(row.isNullAt(0)) {
println("null data")
} else {
println(row.get(0).toString)
}
val employeeJobData = new EmployeeJobData
if(row.get(0).toString == null || row.get(0).toString.isEmpty){
employeeJobData.setEmployeeId("NULL_KEY_VALUE")
} else {
employeeJobData.setEmployeeId(row.get(0).toString)
}
employeeJobDataList.add(employeeJobData)
} )
的输出 df.show()
:
|employee_id|employee_name|employee_email|paygroup|level|dept_id|
+-----------+-------------+--------------+--------+-----+-------+
|13 | null| null| null| null| null|
|14 | null| null| null| null| null|
|15 | null| null| null| null| null|
|16 | null| null| null| null| null|
|17 | null| null| null| null| null|
+-----------+-------------+--------------+--------+-----+-------+
答案
你可以删除不必要的代码,如下所示,并获得 java.util.List[EmployeeJobData]
如下
import java.util
object MapToCaseClass {
def main(args: Array[String]): Unit = {
val spark = Constant.getSparkSess;
import spark.implicits._
val df = List((12,"name","email@email.com","paygroup","level","dept_id")).toDF()
val employeeList : util.List[EmployeeJobData] = df
.map(row => {
val id = if (null == row.getString(0) || "null".equals(row.getString(0)) || row.getString(0).trim.isEmpty) {
"NULL_KEY_VALUE"
} else {
row.getString(0)
}
EmployeeJobData(id, row.getString(1), row.getString(2),
row.getString(3), row.getString(4), row.getString(5))
})
.collectAsList
}
}
case class EmployeeJobData(employee_id: String, employee_name: String,employee_email: String,paygroup: String,
level: String,dept_id: String)
以上可以做更多的改进,只要将数据类型设置为 employee_id
和 dept_id
至 Long
. 这个 "null".equals
和 .isEmpty()
免得 employee_id
和代码可以进一步减少。
以上是关于数据框架到RDD这段代码无法工作。的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 customSchema 将 RDD 转换为 DF