星火SQL查询失败(Spark Sql query fails)

2019-09-28 00:21发布

使用火花2 /爪哇/ Cassanda2.2试图运行简单的火花的SQL查询,它错误:如下尝试,+等的变化“‘LAX’”,和“=”而不是“==”。

Exception in thread "main" org.apache.spark.sql.AnalysisException: cannot resolve '`LAX`' given input columns: [transdate, origin]; line 1 pos 42;
'Project ['origin]
+- 'Filter (origin#1 = 'LAX)
   +- SubqueryAlias origins
      +- LogicalRDD [transdate#0, origin#1]

JavaRDD<TransByDate> originDateRDD = javaFunctions(sc).cassandraTable("trans", "trans_by_date", CassandraJavaUtil.mapRowTo(TransByDate.class)).select(CassandraJavaUtil.column("origin"), CassandraJavaUtil.column("trans_date").as("transdate"));

long cnt1= originDateRDD.count();
System.out.println("sqlLike originDateRDD.count: "+cnt1); --> 406000
Dataset<Row> originDF = sparks.createDataFrame(originDateRDD, TransByDate.class);
originDF.createOrReplaceTempView("origins");
Dataset<Row> originlike = sparks.sql("SELECT origin FROM origins WHERE origin =="+ "LAX");

我已经启用蜂巢支持(是否有帮助)谢谢

Answer 1:

把单引号内的列值。 您的查询应该如下。

Dataset<Row> originlike = spark.sql("SELECT origin FROM origins WHERE origin == "+"'LAX'");

你可以参考使用SQL星火查询Cassandra的数据在Java中的更多细节。

像查询应该像下面。

Dataset<Row> originlike = spark.sql("SELECT origin FROM origins WHERE origin like 'LA%'");


Answer 2:

蜂房是没有问题的,这里是你的问题的线路:

Exception in thread "main" org.apache.spark.sql.AnalysisException: cannot resolve '`LAX`' given input columns: [transdate, origin]; line 1 pos 42;

这是什么说的是列名中,没有一个被命名为LAX。 斯卡拉DSL询问===匹配的值是一列中的一个关键的时候,perahps类似的会比较理想的东西,有点像origins.filter($"origin === "LAX")



文章来源: Spark Sql query fails