我有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语言输入的方式上略有不同。