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)
    
  • 相关阅读:
    奔跑的绵羊js
    13.差分
    12.子矩阵的和
    11.前缀和
    10.高精度除法
    9.高精度乘法
    8.高精度减法
    7.高精度加法
    6.数的三次方根
    5.数的范围
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/14450411.html
Copyright © 2011-2022 走看看