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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。