【问题标题】:Spark Dataframe count function and many more functions throw IndexOutOfBoundsExceptionSpark Dataframe 计数函数和更多函数抛出 IndexOutOfBoundsException
【发布时间】: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


【解决方案1】:

同意 cmets,问题似乎出在 x(0) 上。如果有一个空行,它将抛出Exception。一种解决方案(取决于变量 x 的类型)是使用 headOption 检索它

val rddWithOutNull2 = rddSlices.filter(_.headOption.isDefined)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    相关资源
    最近更新 更多