map(Row(_))错误,需要用Row.fromSeq(_)

本文详细解析了在使用Apache Spark创建DataFrame时遇到的常见错误,即字符串数组被误认为是外部类型的问题,并提供了正确的解决方案,即使用Row.fromSeq(_)替代Row(_)来映射RDD。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 val rddRow = rdd.map(Row(_))
 spark.createDataFrame(rddRow,schema)

Caused by: java.lang.RuntimeException: Error while encoding: java.lang.RuntimeException: [Ljava.lang.String; is not a valid external type for schema of string
if (assertnotnull(input[0, org.apache.spark.sql.Row, true], top level row object).isNullAt) null else staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true], top level row object), 0, _c0), StringType), true) AS _c0#0
+- if (assertnotnull(input[0, org.apache.spark.sql.Row, true], top level row object).isNullAt) null else staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true], top level row object), 0, _c0), StringType), true)
   :- assertnotnull(input[0, org.apache.spark.sql.Row, true], top level row object).isNullAt
   :  :- assertnotnull(input[0, org.apache.spark.sql.Row, true], top level row object)
   :  :  +- input[0, org.apache.spark.sql.Row, true]
   :  +- 0
   :- null

需要用

Row.fromSeq(_)
val rddRow = rdd.map(Row.fromSeq(_))
spark.createDataFrame(rddRow,schema)

 

import org.apache.spark.sql.{Row, SparkSession} import org.apache.spark.sql.types._ import scala.collection.mutable import java.text.SimpleDateFormat object sparkSQL01 { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .master("local") .appName("test") .config("spark.sql.shuffle.partitions", "5") .getOrCreate() /** ************************ student表结构*****************************/ val studentRDD = spark.sparkContext.textFile("data/student.txt") //创建表结构(学号,学生姓名,学生性别,学生出生年月,学生所在班级) //转换为DataFrame //生成临时表 /** ************************ teacher表结构*****************************/ val teacherRDD = spark.sparkContext.textFile("data/teacher.txt") //创建表结构(教工编号(主键),教工姓名,教工性别,教工出生年份,职称,教工所在部门) //转换为DataFrame //生成临时表 /** ************************ course表结构*****************************/ val courseRDD = spark.sparkContext.textFile("data/course.txt") //创建表结构(课程号,课程名称,教工编号) //转换为DataFrame //生成临时表 /** ************************ score表结构*****************************/ val scoreRDD = spark.sparkContext.textFile("data/score.txt") //创建表结构(学号(外键),课程号(外键),成绩) //转换为DataFrame //生成临时表 /** ************************对各表的处理*****************************/ //按照班级排序显示所有学生信息 //查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 //显示性别为nv的教师信息 //显示不重复的教师部门信息 //显示最高成绩 //按照班级排序显示每个班级的平均成绩 } }
最新发布
07-03
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值