【问题标题】:How to read Hive table with column with JSON strings?如何读取带有 JSON 字符串的列的 Hive 表?
【发布时间】:2017-06-29 10:59:37
【问题描述】:

我有一个配置单元表列(Json_String String),它有大约 1000 行,其中每一行都是相同结构的 Json。我正在尝试将 json 读取到 Dataframe 中,如下所示

val df = sqlContext.read.json("select Json_String from json_table") 

但它抛出了下面的异常

java.io.IOException: No input paths specified in job

有什么方法可以像我们使用通配符处理 Json 文件一样将所有行读取到数据框中

val df = sqlContext.read.json("file:///home/*.json")

【问题讨论】:

    标签: scala apache-spark hive apache-spark-sql


    【解决方案1】:

    我认为您要求的是像往常一样读取 Hive 表并使用 from_json 函数转换 JSON 列。

    from_json(e: Column, schema: StructType): Column 将包含 JSON 字符串的列解析为具有指定架构的 StructType。如果是不可解析的字符串,则返回 null。

    鉴于您在代码中使用 sqlContext,恐怕您使用的是 Spark from_json(在 2.1.0 中添加)。

    然后解决方案是使用自定义的用户定义函数 (UDF) 自己进行解析。

    val df = sqlContext.read.json("从 json_table 中选择 Json_String")

    上述方法不起作用,因为 json 运算符需要磁盘上 JSON 文件的一个或多个路径(不是针对 Hive 表执行查询的结果)。

    json(paths: String*): DataFrame 加载 JSON 文件(JSON Lines 文本格式或换行符分隔的 JSON)并将结果作为 DataFrame 返回。

    【讨论】:

    • 你知道直到今天我们还需要在 Spark 1.6.x 中手动解析吗?
    • 所以基本上就你所记得的,要在 1.6.x 中解析 JSON,我们需要构建一个自定义解析器?
    • 我想是的。但是,我会在 stackoverflow 上问一个问题以更好地了解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2020-06-05
    • 1970-01-01
    相关资源
    最近更新 更多