zoukankan      html  css  js  c++  java
  • SparkSQL JSON数据操作(1.3->1.4)

    1.用户自定义schema

    data

    json串格式如下:

    {
        "partner_code": "demo",
        "app_name": "web",
        "person_info": {
            "name": "张三",
            "age": 18
        },
        "items": [
            {
                "item_id": 1,
                "item_name": "王家村",
                "group": "group1"
            },
            {
                "item_id": 2,
                "item_name": "李家澡堂",
                "item_detail": {
                    "platform_count": 2
                },
                "group": "group2"
            }
        ]
    }

    spark1.3

    在spark1.3我们是这样处理的

    //定义schema
    val struct =StructType(
        StructField("partner_code", StringType, true) ::
        StructField("app_name", StringType, true)::
        StructField("person_info",MapType(StringType,StringType,true)) ::                    
        StructField("items",ArrayType(MapType(StringType,StringType,true))) ::
            Nil)
    
     val data = sc.textFile("path/jsonFile")
     val df = sqlContext.jsonRDD(data,struct)
     df.printSchema
     df.show

    spark1.4

    //定义schema
    val struct =StructType(
        StructField("partner_code", StringType, true) ::
        StructField("app_name", StringType, true)::
        StructField("person_info",MapType(StringType,StringType,true)) ::                    
        StructField("items",ArrayType(MapType(StringType,StringType,true))) ::
            Nil)
    
    val df = sqlContext.read.schema(struct).json("path/jsonFile")

    输出结果

    //df.printSchema
    root
     |-- partner_code: string (nullable = true)
     |-- app_name: string (nullable = true)
     |-- person_info: map (nullable = true)
     |    |-- key: string
     |    |-- value: string (valueContainsNull = true)
     |-- items: array (nullable = true)
     |    |-- element: map (containsNull = true)
     |    |    |-- key: string
     |    |    |-- value: string (valueContainsNull = true)
    
    //df.show
    +------------+--------+--------------------+--------------------+
    |partner_code|app_name|         person_info|               items|
    +------------+--------+--------------------+--------------------+
    |        demo|     web|Map(name -> 张三, a...|List(Map(item_id ...|
    +------------+--------+--------------------+--------------------+

    系统自动生成schema

    直接使用自带的解析会更方便,不过那样会产生大量的struct结构,同时如果结构复杂多变将会产生大量的空值。

    //不需要定义schema,系统自动判断生成
    val df = sqlContext.read.json("path/jsonFile")
    df.printSchema
    df.show

    输出结果

    //df.printSchema
    root
     |-- app_name: string (nullable = true)
     |-- items: array (nullable = true)
     |    |-- element: struct (containsNull = true)
     |    |    |-- group: string (nullable = true)
     |    |    |-- item_detail: struct (nullable = true)
     |    |    |    |-- platform_count: long (nullable = true)
     |    |    |-- item_id: long (nullable = true)
     |    |    |-- item_name: string (nullable = true)
     |-- partner_code: string (nullable = true)
     |-- person_info: struct (nullable = true)
     |    |-- age: long (nullable = true)
     |    |-- name: string (nullable = true)
    
    //df.show
    +--------+--------------------+------------+-----------+
    |app_name|               items|partner_code|person_info|
    +--------+--------------------+------------+-----------+
    |     web|List([group1,null...|        demo|    [18,张三]|
    +--------+--------------------+------------+-----------+
  • 相关阅读:
    LeetCode -- 合并区间
    windows + PyCharm安装第三方库libsvm失败的解决方案
    LeetCode--在排序数组中查找元素的第一个和最后一个位置
    LeetCode--搜索旋转排序数组
    LeetCode--单词拆分
    LeetCode--合并K个有序链表
    LeetCode--括号生成
    2015.12.21日官方最新公告!中国骇客云安全响应平台正式上线啦!
    尊敬的朋友们大家好,最新公告!寒龙联盟上线了。
    中国寒龙出品,易语言病毒之末日毁灭杀毒病毒源码,欢迎分享订阅我们的网站,我们会及时发布相关教学的。
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6168181.html
Copyright © 2011-2022 走看看