我有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
中断都很好答案 0 :(得分:2)
在您的虚拟机中,您是将sqlContext
创建为SQLContext
还是HiveContext
?
在Databricks中,自动创建的sqlContext
将始终指向HiveContext
。
在Spark 2.0中,HiveContext
和常规SQLContext
之间的区别无关紧要,因为两者都被SparkSession
包含在内,但在Spark 1.6中,两种类型的上下文在如何区别方面略有不同解析SQL语言输入。