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)
    
  • 相关阅读:
    POJ 3630 Phone List | Trie 树
    POJ 3974 Palindrome | 马拉车模板
    POJ 3422 Kaka's Matrix Travels | 最小费用最大流
    POJ 2195 Going Home | 带权二分图匹配
    POJ 3068 "Shortest" pair of paths | 最小费用最大流
    POJ 3686 The Windy's | 最小费用最大流
    洛谷 最小费用最大流 模板 P3381
    POJ 2987 Firing | 最大权闭合团
    POJ 3469 Dual Core CPU | 最小割
    POJ 3281 Dining | 最大流
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/14450411.html
Copyright © 2011-2022 走看看