我有一个Spark程序,从CSV文件中读取并将它们加载到dataframe中。加载后,我使用SparkSQL操作它们。
当运行我的Spark作业时,它失败并给我以下异常:
org.apache.spark.sql。AnalysisException:无法解析给定输入列["alpha", "beta", "gamma", "delta", "action"]的' action
'
当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);
尝试在您的选择中添加反引号。
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中已添加内置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")
我在集群中使用2.0,而代码是2.3,我面临着同样的问题,我通过在运行时使用适当的spark版本来摆脱它。