在apache spark上执行sql查询时出现arrayindexoutofbound异常

Posted

技术标签:

【中文标题】在apache spark上执行sql查询时出现arrayindexoutofbound异常【英文标题】:arrayindexoutofbound exception while executing sql query on apache spark 【发布时间】:2018-03-07 18:19:59 【问题描述】:

我在 Spark 中使用以下命令在 Spark 中创建了一个表

case class trip(trip_id: String, duration: String, start_date: String, 
        start_station: String, start_terminal: String, end_date: String, 
        end_station: String, end_terminal: String, bike: String, 
        subscriber_type: String, zipcode: String)

    val trip_data = sc.textFile("/user/sankha087_gmail_com/trip_data.csv")

    val tripDF = trip_data
        .map(x=> x.split(","))
        .filter(x=> (x(1)!= "Duration"))
        .map(x=> trip(x(0),x(1),x(2),x(3),x(4),x(5),x(6),x(7),x(8),x(9),x(10)))
        .toDF() 

    tripDF.registerTempTable("tripdatas")

    sqlContext.sql("select * from tripdatas").show()

如果我正在运行上面的查询(即选择 *),那么我会得到想要的结果,但是如果我运行下面的查询,那么我会得到下面的异常:

sqlContext.sql("select count(1) from tripdatas").show() 

18/03/07 17:59:55 错误 scheduler.TaskSetManager: 阶段 2.0 中的任务 1 失败 4 次;中止工作 org.apache.spark.SparkException:作业因阶段失败而中止:阶段 2.0 中的任务 1 失败 4 次,最近一次失败:阶段 2 中丢失任务 1.3。 0(TID 6,datanode1-cloudera.mettl.com,执行程序 1):java.lang.ArrayIndexOutOfBoundsException:10 在$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$anonfun$3.apply(:31) 在$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$anonfun$3.apply(:31)***

【问题讨论】:

如果错误信息由sqlContext.sql("select count(1) from tripdatas").show() 显示,那么错误信息也应该与sqlContext.sql("select * from tripdatas").show() 一起出现 【参考方案1】:

检查您的数据。如果数据中的任何行包含少于 11 个元素,您就会看到该错误。

您可以尝试通过这种方式查看最小列数。

val trip_data = spark.read.csv("/user/sankha087_gmail_com/trip_data.csv")
println(trip_data.columns.length)

【讨论】:

我正在尝试您建议的命令,但出现以下异常:`scala> val trip_data_sample = spark.read.csv("/user/sankha087_gmail_com/trip_data.csv") :25:错误:未找到:值 spark val trip_data_sample = spark.read.csv("/user/sankha087_gmail_com/trip_data.csv") `请帮助 'spark' 只是 spark 会话,如果您使用的是 spark shell,则会自动创建。如果您正在编写一个 spark 应用程序,只需将其替换为您生成的任何 sparkSession 即可。这只是查看数据中列数的一种便捷方式。如果文件不是太大,您可以随时进行手动检查。

以上是关于在apache spark上执行sql查询时出现arrayindexoutofbound异常的主要内容,如果未能解决你的问题,请参考以下文章

Spark SQL - org.apache.spark.sql.AnalysisException

调用 saveAsTable 时出现 org.apache.spark.sql.AnalysisException

执行 spark-shell 时出现 NoClassDefFoundError com.apache.hadoop.fs.FSDataInputStream

在 Spark 2.0 中访问向量列时出现 MatchError

将数据写入 Hive Spark SQL 时出现 ArrayIndexOutOfBoundsException 异常

尝试使用 apache spark 加载模块时出现 Databricks 错误 [重复]