无法在 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

基于spark1.4的Spark-Sql

无法在 spark sql 中注册 UDF

spark sql 无法在 S3 中查询镶木地板分区