• 用 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
      来源:简书
      著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    对 getaddrinfo Android 返回错误 EAI_BADFLAGS
    getaddrinfo详解
    使用moment.js管理时间
    ejs循环实例
    Express优化-合并路由
    Express重定向
    Express中间件
    express.Router创建模块化路由
    Express路由
    nodejs + express访问静态资源
  • 原文地址:https://www.cnblogs.com/wang102030/p/11905857.html
Copyright © 2020-2023  润新知