• 用 Spark 处理复杂数据类型(Array、Map、JSON字符串等)


    
    
    split 对列表进行切割,然后生产新的列表

    from
    pyspark.sql.functions import split
    # 对 key列按照 0-9之间的数字进行风格 重新命名为 s
     df.select(split(df.key, '[0-9]+').alias('s'))
    df1 = df.select(split(df.key, '[0-9]+').alias('s')) # 重新转移变量给df1
     df1.withColumn("sd",df1["s"][0]).show() # 把 分割出来的s 提取出第[0]个重新成立新行
    to_jso 把每一行全部转为,然后生产新的列表
    from pyspark.sql.functions import to_json,struct

    将每一行转化为json 并将行名,命名为wang df.select(to_json(struct([df["key"]])).alias("wang")).show()
    • withColumn(colName, col)
    • 通过为原数据框添加一个新列替换已存在的同名列而返回一个新数据框。colName 是一个字符串, 为新列的名字。
      col 为这个新列的 Column 表达式。withColumn 的第一个参数必须是已存在的列的名字, withColumn 的第二个参数必须是含有列的表达式。如果不是它会报错 AssertionError: col should be Column
    • df.withColumn('page_count', df.page_count+100).select("app_key","page_count").take(2)
      [Row(app_key=u'2323423dsfds', page_count=110), Row(app_key=u'2323423dsfds', page_count=104)]
      df.withColumn('avg', df.page_count/df.duration).select("app_key","avg").take(2)
      [Row(app_key=u'2323423dsfds', avg=0.00012387736141220192), Row(app_key=u'2323423dsfds', avg=0.16666666666666666)]


      作者:焉知非鱼
      链接:https://www.jianshu.com/p/604f5fd39ba6
      来源:简书
      著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    spring service层单元测试
    Java源码学习 -- java.lang.StringBuilder,java.lang.StringBuffer,java.lang.AbstractStringBuilder
    Java源码学习 -- java.lang.String
    动态规划算法
    单元测试(Spring)
    Servlet/JSP
    Log4j2 — Log4j2导入、LogEvent、配置文件编写及路径
    idea 控制台输出 中文乱码 解决方法
    常见正则表达式
    读《浪潮之巅》(吴军著)有感
  • 原文地址:https://www.cnblogs.com/wang102030/p/11905857.html
Copyright © 2020-2023  润新知