【问题标题】:How do I load gziped json data into table, using Spark SQL's CREATE TABLE Query如何使用 Spark SQL CREATE TABLE 查询将压缩的 json 数据加载到表中
【发布时间】:2021-11-29 05:15:19
【问题描述】:

我想将 Apache Superset 与 Apache Spark 连接(我有 Spark 3.1.2)并使用 Apache Spark SQL 查询 Superset 的 SQL Lab 上的数据。

在spark的master上,我使用这个命令spark-submit --class org.apache.spark.sql.hive.thriftserver.HiveThriftServer2启动了thrift server。

然后我使用 SQLAlchemy URI hive://hive@spark:10000/ 在 Superset 中添加 Spark 集群作为数据库。我能够访问 Superset 上的 Spark 集群。

我可以使用此 SQL 将 JSON 数据加载为表

CREATE table IF NOT EXISTS test_table
USING JSON
LOCATION "/path/to/data.json"

我可以使用简单的 SQL 语句查询数据,例如 SELECT * FROM test_table LIMIT 10

但问题是 json 数据被压缩为 gzip 文件。

所以我尝试了

CREATE table IF NOT EXISTS test_table
USING JSON
LOCATION "/path/to/data.json.gz"

但它不起作用。 我想知道如何将压缩后的 json 数据加载到表中

【问题讨论】:

  • 您期望的静态数据格式是什么?
  • 静态数据是用 gzip 压缩的换行符分隔的 json。

标签: apache-spark apache-spark-sql apache-superset


【解决方案1】:

压缩 JSON 存储

如果您有较大的 JSON 文本,您可以使用内置的 COMPRESS 函数显式压缩 JSON 文本。在以下示例中,压缩的 JSON 内容存储为二进制数据,我们使用 DECOMPRESS 函数计算了将 JSON 解压缩为原始文本的列:

CREATE TABLE Person

( _id int identity constraint PK_JSON_ID primary key,

data varbinary(max),

value AS CAST(DECOMPRESS(data) AS nvarchar(max))

)



INSERT INTO Person(data)

VALUES (COMPRESS(@json))

COMPRESS 和 DECOMPRESS 函数使用标准 GZip 压缩。

另一个例子:

CREATE EXTENSION json_fdw;
postgres=# CREATE SERVER json_server FOREIGN DATA WRAPPER json_fdw;

postgres=# CREATE FOREIGN TABLE customer_reviews
(
    customer_id TEXT,
    "review.date" DATE,
    "review.rating" INTEGER,
    "product.id" CHAR(10),
    "product.group" TEXT,
    "product.title" TEXT,
    "product.similar_ids" CHAR(10)[]
)
SERVER json_server
OPTIONS (filename '/home/citusdata/customer_reviews_nested_1998.json.gz');

注意:这个例子取自https://www.citusdata.com/blog/2013/05/30/run-sql-on-json-files-without-any-data-loads

【讨论】:

  • 这有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2016-10-11
  • 2010-10-30
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 2022-01-12
相关资源
最近更新 更多