首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SparkSQL和UDT

SparkSQL和UDT
EN

Stack Overflow用户
提问于 2015-03-16 16:56:50
回答 1查看 1.6K关注 0票数 4

我尝试使用SparkSQL (v.1.3.0)访问PostgreSQL数据库。在这个数据库中,我有一张表

代码语言:javascript
复制
CREATE TABLE test (
 id bigint,
 values double precision[]
);

对于访问表,我使用

代码语言:javascript
复制
val sparkConf = new SparkConf().setAppName("TestRead").setMaster("local[2]")
val sc = new SparkContext(sparkConf)
val sqlContext = new SQLContext(sc)

val jdbcDF = sqlContext.load("jdbc", Map(
  "url" -> "jdbc:postgresql://...",
  "dbtable" -> "schema.test",
  "user" -> "...",
  "password" -> "..."))

sqlContext.sql("SELECT * FROM schema.test")

但是,每次我尝试访问包含这个数组的表时,我都会得到一个java.sql.SQLException: Unsupported type 2003

我在星火测试代码中找到了一个例子,它在星火中为一个二维点创建了一个UDT (参见ExamplePointUDT.scala)。但是,我不明白我怎么可能使用这段代码。

EN

回答 1

Stack Overflow用户

发布于 2015-11-04 23:21:06

这是可以实现的,至少可以通过在查询中进行强制转换来实现,至少在pyspark中是如此。不要让不受支持的类型达到火花,将它们抛到数据库中,然后在得到表后再将它们抛回。

我不确定语法是否正确,但应该是这样的:

代码语言:javascript
复制
val query_table = "(SELECT id, CAST(values AS TEXT) FROM schema.test) AS casted_table"

val jdbcDF = sqlContext.load("jdbc", Map(
  "url" -> "jdbc:postgresql://...",
  "dbtable" -> query_table,
  "user" -> "...",
  "password" -> "..."))

jdbcDF.map(x => (x.id, x.values.toArray))

我很确定没有.toArray可以将字符串表示转换回数组,它只是位置保持代码。但现在这只是正确解析它的问题。

当然,这只是一个补丁,但它有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29082612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档