pyspark如何给dataframe增加新的一列

  介绍

这篇文章主要讲解了pyspark如何给dataframe增加新的一列,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

熟悉熊猫的python应该知道给dataframe增加一列很容易,直接以字典形式指定就好了,pyspark中就不同了,摸索了一下,可以使用如下方式增加

  从pyspark进口SparkConf
  从pypsark。sql进口SparkSession
  从pyspark。sql导入函数
  
  火花=SparkSession.builder.config(参看=SparkConf ()) .getOrCreate ()
  
  data=https://www.yisu.com/zixun/[[“蓝”、“爱丽丝”,19日”(“蓝色”“爱丽丝”,19日”),
  (“绿色”“简”,20日,”(“绿色”“简”,20日]”),
  (“蓝”、“玛丽”,21日”(“玛丽”,21岁的“蓝色”)”),)
  ?火花。createDataFrame(数据、模式=[“名称”、“年龄”、“eye_color”,“细节”))
  
  frame.cache ()
  frame.show () 

+——+ - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| |名字年龄| eye_color |,,,,,,,,,,,,,细节|
+——+ - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -爱丽丝+
| | | 19日,,,,19岁的蓝色| (“Alice"“提单…简|
| | | 20个,,,绿色| (“Jane" 20“gre考试……玛丽|
| | | 21日,,,,21岁的蓝色| (“Mary"“blue"] |
+——+ - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

<强> 1,增加常数项

 frame2=frame.withColumn (“contant", functions.lit (10))
  frame2.show () 

+——+ - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
| |名字年龄| eye_color |,,,,,,,,,,,,,细节显示| |
+——+ - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|爱丽丝19 | |,,,,19岁的蓝色| (“Alice"“提单…|,,,,简10 |
| | | 20个,,,绿色| (“Jane" 20“gre…|,,,,玛丽10 |
| | | 21日,,,,21岁的蓝色| (“Mary"“blue"] |,,,,10 |
+——+ - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +

<强> 2,简单根据某列进行计算

2.1使用withColumn

 frame3_1=frame.withColumn (“name_length", functions.length (frame.name))
  frame3_1.show () 

+——+ - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
| |名字年龄| eye_color |,,,,,,,,,,,,,细节| name_length |
+——+ - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|爱丽丝19 | |,,,,19岁的蓝色| (“Alice"“提单…|,,,,,,,,,简| 5 |
| | 20个,,,绿色| (“Jane" 20“gre…|,,,,,,,,,玛丽| 4 |
| | 21日,,,,21岁的蓝色| (“Mary"“blue"] |,,,,,,,,,4 |
+——+ - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +

2.2使用选择

 frame3_2=frame.select ([“name", functions.length (frame.name) .alias (“name_length")))
  frame3_2.show () 

+ - - - - - - - - - - - - - - - - - - +
| |名称name_length |
+ - - - - - - - - - - - - - - - - - -爱丽丝+
| |,,,,,,,,,简| 5 |
|,,,,,,,,,玛丽4 |
| |,,,,,,,,,4 |
+ - - - - - - - - - - - - - - - - - - +

2.3使用selectExpr

 frame3_3=frame.selectExpr ([“name",“长度(名字)name_length"])
  frame3_3.show () 

+ - - - - - - - - - - - - - - - - - - +
| |名称name_length |
+ - - - - - - - - - - - - - - - - - -爱丽丝+
| |,,,,,,,,,简| 5 |
|,,,,,,,,,玛丽4 |
| |,,,,,,,,,4 |
+ - - - - - - - - - - - - - - - - - - +

<强> 3,定制化根据某列进行计算

比如我想对某列做指定操作,但是对应的函数没得咋办,造,自己造~

 frame4=frame.withColumn (“detail_length",功能。UserDefinedFunction(λobj: len (json.loads (obj))) (frame.detail))
  
  #或
  def length_detail (obj):
  返回len (json.loads (obj))
  frame4=frame.withColumn (“detail_length" functions.UserDefinedFunction (length_detail) (frame.detail))
  frame4.show () 

+——+ - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - +
| |名字年龄| eye_color |,,,,,,,,,,,,,细节| detail_length |

pyspark如何给dataframe增加新的一列