在比较Spark SQL中的项时where子句内部出错

时间:2016-12-01 02:26:18

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

我有cloudera vm运行spark版本1.6.0

我从CSV文件创建了一个数据框,现在根据where子句

过滤列
df = sqlContext.read.format('com.databricks.spark.csv').options(header='true').load('file:///home/cloudera/sample.csv')
df.registerTempTable("closedtrips")

result = sqlContext.sql("SELECT id,`safety rating` as safety_rating, route FROM closedtrips WHERE `trip frozen` == 'YES'")

然而它在sql行上给了我运行时错误。

py4j.protocol.Py4JJavaError: An error occurred while calling o21.sql.
: java.lang.RuntimeException: [1.96] failure: identifier expected

SELECT consigner,`safety rating` as safety_rating, route FROM closedtrips WHERE `trip frozen` == 'YES'
                                                                                               ^

我在哪里错了?

以上命令在vm命令行中失败,但在databricks环境中运行时工作正常

为什么列名称在vm中区分大小写,它无法识别'trip frozen',因为实际列是'Trip Frozen'。 所有这些在databricks和vm

中断都很好

1 个答案:

答案 0 :(得分:2)

在您的虚拟机中,您是将sqlContext创建为SQLContext还是HiveContext

在Databricks中,自动创建的sqlContext将始终指向HiveContext

在Spark 2.0中,HiveContext和常规SQLContext之间的区别无关紧要,因为两者都被SparkSession包含在内,但在Spark 1.6中,两种类型的上下文在如何区别方面略有不同解析SQL语言输入。