【问题标题】:Error inside where clause while comparing items in Spark SQL在比较 Spark SQL 中的项目时,where 子句中出现错误
【发布时间】:2016-12-01 11:07:14
【问题描述】:

我有运行 spark 版本 1.6.0 的 cloudera vm

我从 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 freeze”,因为实际的列是“trip freeze”。 所有这些在数据块中都可以正常工作,并且在 vm 中中断

【问题讨论】:

    标签: apache-spark apache-spark-sql spark-dataframe


    【解决方案1】:

    在您的 VM 中,您是创建 sqlContextSQLContext 还是 HiveContext

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

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

    【讨论】:

    • 我定义为sqlcontext, sqlContext = SQLContext(sc) 如果我定义为hivecontext,区分大小写的问题会解决吗?
    • 我相信这应该可以解决failure: identifier expected 问题;我不确定是否区分大小写。
    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 2015-11-17
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    相关资源
    最近更新 更多