分享

spark2 sql读取json文件的格式要求

本帖最后由 pig2 于 2017-12-15 18:11 编辑
问题导读

1.spark2 sql如何读取json文件?
2.spark2读取json格式文件有什么要求?
3.spark2是如何处理对于带有表名信息的json文件的?





spark有多个数据源,其中json是其中一种。那么对于json格式的数据,spark在操作的过程中,我们可能会遇到哪些问题?
这里首先我们需要对json格式的数据有一定的了解。
json数据有两种格式:
1.对象表示
2.数组表示
二者也有嵌套形式。
比如我们创建一个个人信息的json。
[mw_shl_code=text,true]{    "people": [
        {
            "name": "aboutyun",
            "age": "4"
        },
        {
            "name": "baidu",
            "age": "5"
        }
    ]
}[/mw_shl_code]上面是一个比较常见的json。信息我们大致也能看出来:people表示的是我们想表示的是people的信息,后面的内容为内容,包含了姓名和年龄。然而我们在使用spark读取的时候却遇到点小问题。上面内容保存为文件people.json,然后上传到hdfs的跟路径,进入spark-shell,读取json文件
[mw_shl_code=scala,true]val peopleDF=spark.read.json("/people.json")[/mw_shl_code]
打印schema
[mw_shl_code=bash,true]peopleDF.printSchema[/mw_shl_code]
people.jpg

这时候我们看到people为列,而age和name非列名。我们通过
[mw_shl_code=scala,true] peopleDF.show[/mw_shl_code]展示列名
1.jpg

也就是说我们如果带有"people"格式的信息,DataFrame中people会被认为是列名。那么我们该如何做,才能让spark正确的读取?
我们来尝试下面格式的json文件
[mw_shl_code=text,true][
    {
        "name": "aboutyun",
        "age": "4"
    },
    {
        "name": "baidu",
        "age": "5"
    }
][/mw_shl_code]
操作是同样的方式
[mw_shl_code=scala,true]val peopleDF=spark.read.json("/people.json")[/mw_shl_code]
[mw_shl_code=bash,true]peopleDF.printSchema[/mw_shl_code]
schema.jpg

接着我们来打印数据
[mw_shl_code=scala,true]peopleDF.show[/mw_shl_code]
show.jpg

这时候我们看到它能正确的显示数据了。
从上面我们看出spark对于json文件,不是什么格式都是可以的,需要做一定的修改,才能正确读取,相信以后spark会有所改进。
下一篇spark2 sql读取json文件的格式要求续:如何查询数据
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23483
相关文章:
spark2 sql读取json文件的格式要求
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23478


spark2 sql读取json文件的格式要求续:如何查询数据
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23483

spark2 sql编程之实现合并Parquet格式的DataFrame的schema
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23518

spark2 sql编程样例:sql操作
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23501

spark2 sql读取数据源编程学习样例1:程序入口、功能等知识详解
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23484


spark2 sql读取数据源编程学习样例2:函数实现详解
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23489


spark2 sql编程之实现合并Parquet格式的DataFrame的schema
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23518




本帖被以下淘专辑推荐:

已有(3)人评论

跳转到指定楼层
小伙425 发表于 2017-12-8 09:27:32
你这么修改json格式的确是吧age和name作为了列,但是你的表明没有啦。。和最初的初衷也不一样啊。。。
回复

使用道具 举报

pig2 发表于 2017-12-8 11:08:18
小伙425 发表于 2017-12-8 09:27
你这么修改json格式的确是吧age和name作为了列,但是你的表明没有啦。。和最初的初衷也不一样啊。。。

DataFrame还未注册,不存在表名,看下一篇文章spark2 sql读取json文件的格式要求
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23478


json的表名只是一个称呼,并非实际表名。
回复

使用道具 举报

tntzbzc 发表于 2017-12-8 11:12:16
小伙425 发表于 2017-12-8 09:27
你这么修改json格式的确是吧age和name作为了列,但是你的表明没有啦。。和最初的初衷也不一样啊。。。

建议对DataFrame和json理解加深。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条