在比较Spark SQL中的项目时,其中的错误子句



我有cloudera vm运行spark版本1.6.0

我从CSV文件创建了一个数据框,现在根据某些条款

过滤列
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环境上运行时工作正常

为什么列名称case对VM敏感,它无法识别" Trip冻结",因为实际的列是" Trip冻结"。所有这些都可以在Databricks中效果很好,并在VM中断裂

在VM中,您是将sqlContext作为SQLContext还是HiveContext

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

在SPARK 2.0中,HiveContext和常规SQLContext之间的区别不重要,因为两者都由SparkSession包含,但是在Spark 1.6中,两种类型的上下文在解析SQL语言输入的方式上略有不同。

相关内容

  • 没有找到相关文章