zoukankan      html  css  js  c++  java
  • Spark对复杂结构的处理

    结构体

    创建结构体

    在字符串公式中就是一个”()“就表示一个结构体

        //创建结构体
        //方法1:
        df.selectExpr("(Description, InvoiceNo) as complex", "*").show(2)
        //方法2:
        df.selectExpr("struct(Description, InvoiceNo) as complex", "*").show(2)
    

    查询结构体中的信息使用'.'

    数组

    我们的数组通常是DataFrame的一个元素。

    • split函数
          //对Description的数据进行切分生成数组
          df.select(split(col("Description"), " ").as("array")).show(2)
      
      对数组元素的访问:
         //对Description的数据进行切分生成数组
          val arrayDF = df.select(split(col("Description"), " ").as("array"))
          arrayDF.show(20)
          arrayDF.selectExpr("array[0]").show(20)
      

    下面是一些常用的函数:

    • size(Array[])-查询数组的长度
    • array_contains(Array[], 单词)-查询是否包含
    • explode(重要)
      将Array或者Map中形成一列。具体效果看运行的代码结果:
          //对Description的数据进行切分生成数组
          val arrayDF = df.select(split(col("Description"), " ").as("array"), col("*"))
          arrayDF.show(2)
          arrayDF.withColumn("splittedArray", explode(col("array")))
            .select("Description", "splittedArray").show(8)
      

    map结构

    创建map

        //创建map
        df.select(map(col("Description"), col("InvoiceNo")).as("map")).show(2)
    

    可以使用key值对value进行查询,若key值不存在则返回null

    key值查询

        //创建map
        val mapDF = df.select(map(col("Description"), col("InvoiceNo")).as("map"))
        mapDF.selectExpr("map['WHITE METAL LANTERN']").show(2)
    

    将map的键值对转换成列

        //创建map
        val mapDF = df.select(map(col("Description"), col("InvoiceNo")).as("map"))
        //方法1:
        mapDF.selectExpr("explode(map)").show(2)
        //方法2:
        mapDF.select(explode(col("map"))).show(2)
    
  • 相关阅读:
    synchronized锁升级的过程(偏向锁到轻量锁再到重量级锁)转
    sprin 事务注解@Transactional的实现原理(转)
    springboot + redis + 注解 + 拦截器 实现接口幂等性校验(转)
    JAVA-TCP
    oracle查看连接信息
    C# 计算两个字符的相似度
    Java设计模式桥接模式
    C# Newtonsoft.Json.JsonReaderException:“Could not convert string to decimal:
    java设计模式结构型模式
    Java设计模式原型模式
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/14450411.html
Copyright © 2011-2022 走看看