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

Error inside where clause while comparing items in Spark SQL

我有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

中中断

在您的 VM 中,您是将 sqlContext 创建为 SQLContext 还是 HiveContext

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

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