【发布时间】:2018-07-03 03:45:52
【问题描述】:
1) 初始过滤的 RDD 为空值。
val rddWithOutNull2 = rddSlices.filter(x => x(0) != null)
2) 然后将此RDD转换为Row的RDD
3) 使用 Scala 将 RDD 转换为 Dataframe 后:
val df = spark.createDataFrame(rddRow,schema)
df.printSchema()
输出:
root
|-- name: string (nullable = false)
println(df.count())
输出:
Error :
count : :
[Stage 11:==================================> (3 + 2) / 5][error] o.a.s.e.Executor - Exception in task 4.0 in stage 11.0 (TID 16)
java.lang.IndexOutOfBoundsException: 0
- 没有其他 spark sql 函数在此 spark 数据帧上工作。
【问题讨论】:
-
你能添加一些示例输入吗?以及第 2 步的代码。
-
数据类似于 : df.show(5) : +-------------+ |name| +--------------+ | ABC| | qr| | qr| | ABC| | qr| +-------------+ 只显示前 5 行
-
rddSlices可能有空数组,访问x(0)将导致IndexOutOfBoundException -
将其添加到问题中 + 重现问题所需的所有代码。现在很难说错误在哪里。
-
我很确定来自
rddSlices的记录之一是一个空列表。这样做rddSlices.filter(! _.isEmpty).filter(x => x(0) != null)可能会解决您的问题。
标签: scala apache-spark apache-spark-sql bigdata spark-dataframe