美文网首页
SparkSession读取json格式数据和去除null和空字

SparkSession读取json格式数据和去除null和空字

作者: 早上好_先生 | 来源:发表于2020-02-07 14:10 被阅读0次

    spark读取不同文件类型的配置都是不同的,首先先看一下不同格式的option的参数。

    option参数介绍:

    属性名称 默认值 含义
    primitivesAsString false 将所有 原始类型 推断为 字符串类型
    prefersDecimal false 将所有 浮点类型 推断为 decimal 类型,如果不适合,则 推断为 double 类型
    allowComments false 忽略JSON记录中的Java / C ++样式注释
    allowUnquotedFieldNames false 允许不带引号的JSON字段名称
    allowSingleQuotes true 除双引号外,还允许使用单引号
    allowNumericLeadingZeros false 允许数字前有零
    allowBackslashEscapingAnyCharacter false 允许反斜杠转义任何字符
    allowUnquotedControlChars false 允许JSON字符串包含不带引号的控制字符(值小于32的ASCII字符,包括制表符和换行符)或不包含。
    mode PERMISSIVE PERMISSIVE:允许在解析过程中处理损坏记录; DROPMALFORMED:忽略整个损坏的记录;FAILFAST:遇到损坏的记录时抛出异常。
    columnNameOfCorruptRecord columnNameOfCorruptRecord(默认值是spark.sql.columnNameOfCorruptRecord中指定的值):允许重命名由PERMISSIVE 模式创建的新字段(存储格式错误的字符串)。这会覆盖spark.sql.columnNameOfCorruptRecord
    dateFormat dateFormat(默认yyyy-MM-dd):设置表示日期格式的字符串。自定义日期格式遵循java.text.SimpleDateFormat中的格式。
    timestampFormat timestampFormat(默认yyyy-MM-dd'T'HH:mm:ss.SSSXXX):设置表示时间戳格式的字符串。 自定义日期格式遵循java.text.SimpleDateFormat中的格式。
    multiLine false 解析可能跨越多行的一条记录

    实例演示

    数据源格式:data.json:

    [
      {
        "a":"字符串1",
        "b":2,
        "c":"",
        "d":null
      }
    ]
    

    结果显示结果却都在一列中,这并不是我要的结果:

    val spark = SparkSession
          .builder()
          .config("spark.sql.warehouse.dir","file:///")
          .master("local")
          .getOrCreate()
    val ds = spark.read.format("json")
           //将读取的数据全部转换成string数据类型
          .option("primitivesAsString","true")
          .load("./data.json")
    ds.show()
    ds.printSchema()
    
    image.png

    后来网上百度了许多,说的是spark 读取json格式是支持半结构化的数据。
    后来我在网上找了个工具https://www.sojson.com/在线json格式转换
    将数据压缩成单行模式
    再跑一下程序

    [{"a":"字符串1","b":2,"c":"","d":null}]
    
    image.png
    ok,搞定。

    去除null和空字符串

    1.去除null空值

    ds.na.drop(how="all/any",Seq(指定列名))
    

    演示:

    ds.na.drop("any",Seq("a","b")).show()
    
    image.png
    2.去除空字符串
    这里可以使用ds.where进行筛选出非空字符串的数据
    ds.where("c <> ''").show()
    
    image.png

    后记:

    有需要的朋友可以搜索 微信公众号:【知音库
    同时也是为了鼓励自己,坚持写笔记,希望可以共同进步。

    相关文章

      网友评论

          本文标题:SparkSession读取json格式数据和去除null和空字

          本文链接:https://www.haomeiwen.com/subject/hbymxhtx.html