【发布时间】:2018-05-18 21:33:34
【问题描述】:
我想使用StructType 将RDD 转换为DataFrame。但是项目"Broken,Line," 会导致错误。有没有一种优雅的方式来处理这样的记录?谢谢。
import org.apache.spark.sql.types.{StructType, StructField, StringType}
import org.apache.spark.sql.Row
val mySchema = StructType(Array(
StructField("colA", StringType, true),
StructField("colB", StringType, true),
StructField("colC", StringType, true)))
val x = List("97573,Start,eee", "9713,END,Good", "Broken,Line,")
val inputx = sc.parallelize(x).
| map((x:String) => Row.fromSeq(x.split(",").slice(0,mySchema.size).toSeq))
val df = spark.createDataFrame(inputx, mySchema)
df.show
错误是这样的:
名称:org.apache.spark.SparkException 消息:作业因以下原因中止 阶段失败:阶段 14.0 中的任务 0 失败 1 次,最近一次 失败:在 14.0 阶段丢失任务 0.0(TID 14,本地主机,执行程序 驱动程序):java.lang.RuntimeException:编码时出错: java.lang.ArrayIndexOutOfBoundsException: 2
我正在使用:
- 火花:2.2.0
- 斯卡拉:2.11.8
我在spark-shell 中运行了代码。
【问题讨论】:
-
错误是什么?你的代码看起来不错。如果您担心那部分,可以使用
x.split("," , -1)。 -
@philantrovert 谢谢,我刚刚更新了我的问题
标签: apache-spark dataframe apache-spark-sql