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)
    
  • 相关阅读:
    C++内存机制中内存溢出、内存泄露、内存越界和栈溢出的区别和联系
    ArrayList、Vector、HashMap、HashTable、HashSet的默认初始容量、加载因子、扩容增量
    C++ 智能指针 auto_ptr 和 shared_ptr
    Java初始和环境搭建(一)
    Spring_01
    Linux中常用命令
    linux_Ubuntu项目运行环境搭建
    Nginx_Ubuntu
    idea运行时 Process finished with exit code -1073741819 (0xC0000005)
    MySQL_基础
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/14450411.html
Copyright © 2011-2022 走看看