无法在 Spark SQL 中基于 TimeUUID 进行查询
Posted
技术标签:
【中文标题】无法在 Spark SQL 中基于 TimeUUID 进行查询【英文标题】:Cannot query based on TimeUUID in Spark SQL 【发布时间】:2016-07-14 22:59:24 【问题描述】:我正在尝试使用 SparkSQL 终端查询 Cassandra 数据库。 查询:
select * from keyspace.tablename
where user_id = e3a119e0-8744-11e5-a557-e789fe3b4cc1;
错误:java.lang.RuntimeException:[1.88] 失败:预期“联合”,但找到标识符 e5
也试过了:
user_id= UUID.fromString(\`e3a119e0-8744-11e5-a557-e789fe3b4cc1\`)")
user_id= \'e3a119e0-8744-11e5-a557-e789fe3b4cc1\'")
token(user_id)= token(`e3a119e0-8744-11e5-a557-e789fe3b4cc1`)
我不知道如何查询timeuuid
上的数据。
【问题讨论】:
【参考方案1】:SparkSQL 不支持将 TimeUUID 作为类型,因此您只能进行直接的字符串比较。将 TIMEUUID 表示为字符串
select * from keyspace.tablename where user_id = "e3a119e0-8744-11e5-a557-e789fe3b4cc1"
【讨论】:
我也试过这个,但是 sparkSQL 不能识别 TIMEUUID:1) val group = csc.sql("select a from keyspace.table WHERE user_id='e3a119e0-8744-11e5-a557-e789fe3b4cc1 '"); 2)group.show() // 这会抛出错误:Cannot convert object e3a119e0-8744-11e5-a557-e789fe3b4cc1 of type class org.apache.spark.sql.types.UTF8String to java.util.UUID。跨度> 使用 HiveContext,错误可能取决于您的版本确保您使用最新版本的可用连接器 我发现这是 DSE 4.8.4 的问题,在 DSE 5.0.0 的更高版本中已修复。以上是关于无法在 Spark SQL 中基于 TimeUUID 进行查询的主要内容,如果未能解决你的问题,请参考以下文章
无法在 spark 中使用 hive 支持创建 sql 上下文
在 HDP 的 spark2 sql 中无法访问 Hive 表
在 Spark 中执行聚合函数时出错:ArrayType 无法转换为 org.apache.spark.sql.types.StructType