Apache spark 比较Spark SQL中的项时where子句内部出错
我让cloudera虚拟机运行spark 1.6.0版 我从CSV文件创建了一个数据框,现在根据where子句过滤列Apache spark 比较Spark SQL中的项时where子句内部出错,apache-spark,apache-spark-sql,spark-dataframe,Apache Spark,Apache Spark Sql,Spark Dataframe,我让cloudera虚拟机运行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
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 Frozed”,因为实际列是“trip Frozed”。
所有这些在数据块中都可以正常工作,在vm中也可以中断。在您的vm中,您是将
sqlContext
创建为sqlContext
还是将其创建为HiveContext
在Databricks中,自动创建的sqlContext
将始终指向一个HiveContext
在Spark 2.0中,
HiveContext
和常规的SQLContext
之间的这种区别并不重要,因为它们都被SparkSession
所包含,但在Spark 1.6中,这两种上下文在解析SQL语言输入的方式上略有不同。在虚拟机中,您是将sqlContext
创建为sqlContext
还是创建为HiveContext
在Databricks中,自动创建的sqlContext
将始终指向一个HiveContext
在Spark 2.0中,
HiveContext
和常规的SQLContext
之间的这种区别并不重要,因为它们都被SparkSession
所包含,但在Spark 1.6中,这两种上下文在解析SQL语言输入的方式上略有不同。我将其定义为SQLContext,SQLContext=SQLContext(sc)如果我将其定义为hivecontext,则区分大小写的问题将得到解决?我相信这可能会解决故障:预期标识符问题;我不确定是否区分大小写。我将其定义为sqlcontext,sqlcontext=sqlcontext(sc)。如果我将其定义为hivecontext,则区分大小写的问题将得到解决?我相信这可能会解决故障:预期标识符
问题;我不能马上确定案件的敏感性。