json - Postgresql JSONB 数据上的 Spark SQL

标签 json postgresql apache-spark apache-spark-sql

当前的 Postgresql 版本 (9.4) 支持 jsonjsonb 数据类型,如 http://www.postgresql.org/docs/9.4/static/datatype-json.html 中所述。

例如,存储为jsonb的JSON数据可以通过SQL查询查询:

SELECT jdoc->'guid', jdoc->'name'
FROM api 
WHERE jdoc @> '{"company": "Magnafone"}';

作为 Sparker 用户,是否可以通过 JDBC 将此查询发送到 Postgresql 并以 DataFrame 形式接收结果?

到目前为止我尝试了什么:

val url = "jdbc:postgresql://localhost:5432/mydb?user=foo&password=bar"
val df = sqlContext.load("jdbc",
  Map("url"->url,"dbtable"->"mydb", "driver"->"org.postgresql.Driver"))
df.registerTempTable("table")
sqlContext.sql("SELECT data->'myid' FROM table")

但是 sqlContext.sql() 无法理解 SQL 中的 data->'myid' 部分。

最佳答案

无法从 Spark DataFrame API 动态查询 json/jsonb 字段。一旦数据被提取到 Spark,它就会被转换为字符串并且不再是可查询的结构(参见:SPARK-7869)。

正如您已经发现的那样,您可以使用 dbtable/table 参数将子查询直接传递给源,并使用它来提取感兴趣的字段。几乎相同的规则适用于任何非标准类型、调用存储过程或任何其他扩展。

关于json - Postgresql JSONB 数据上的 Spark SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34487229/

相关文章:

javascript - JSON.stringify 抛出错误

javascript - 在 D3.js 中使用数组作为输入数据

sql - Postgres 9.4 : Include sibling column in each jsonb array result

apache-spark - Spark 窗口函数最后一个非空值

java - 如何在retrofit中调用动态嵌套json对象

postgresql - 如何从 docker 容器向主机发送 tcp/ip 请求?

postgresql - 优化索引以查询具有多个连接的大表

apache-spark - apache spark 2.2 没有可用的 toString 方法

hadoop - 如何在 Spark 上运行 Mahout

c# - MVC 5 ASP.NET Json 结果传递参数为 null