org.apache.spark.sql.AnalysisException:无法解析给定的输入列

时间:2016-10-04 19:28:31

标签: apache-spark dataframe apache-spark-sql

我有一个Spark程序可以读取CSV文件并将它们加载到Dataframes中。加载后,我会使用SparkSQL来操作它们。

运行我的Spark作业时,它失败并给我以下异常:

org.apache.spark.sql.AnalysisException:无法解析&#39; action&#39;给定输入列[&#34; alpha&#34;,&#34; beta&#34;,&#34; gamma&#34;,&#34; delta&#34;,&#34; action&#34;] < / p>

当SparkSQL尝试解析以下内容时抛出上述异常:

SELECT *, 
  IF(action = 'A', 1, 0) a_count,
  IF(action = 'B', 1, 0) b_count,
  IF(action = 'C', 1, 0) c_count,
  IF(action = 'D', 1, 0) d_count,
  IF(action = 'E', 1, 0) e_count
FROM my_table

在更新到Spark 2.0之前,此代码工作正常。有谁知道会导致这个问题的原因是什么?

编辑:我使用Databricks CSV解析器加载CSV文件:

sqlContext.read().format("csv")
    .option("header", "false")
    .option("inferSchema", "false")
    .option("parserLib", "univocity")
    .load(pathToLoad);

3 个答案:

答案 0 :(得分:0)

在Spark 2.0中添加了内置的CSV支持,请尝试如下。

spark.read.format("csv").option("header","false").load("../path_to_file/file.csv")
spark.read.option("header", "false").csv("../path_to_file/file.csv")

答案 1 :(得分:0)

尝试在您的选择中添加反引号。

SELECT *, 
  IF(`action` = 'A', 1, 0) a_count,
  IF(`action` = 'B', 1, 0) b_count,
  IF(`action` = 'C', 1, 0) c_count,
  IF(`action` = 'D', 1, 0) d_count,
  IF(`action` = 'E', 1, 0) e_count
FROM my_table

这也适用于MySQL等一些数据库。

答案 2 :(得分:0)

我在集群中使用2.0时,而代码在2.3中,并且我面临着相同的问题,因此在运行时使用适当的spark版本可以摆脱它。