python给dataframe添加一列_pyspark给dataframe增加新的一列的实现示例

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

from pyspark import SparkContext

from pyspark import SparkConf

from pypsark.sql import SparkSession

from pyspark.sql import functions

spark = SparkSession.builder.config(conf=SparkConf()).getOrCreate()

data = [['Alice', 19, 'blue', '["Alice", 19, "blue"]'],

['Jane', 20, 'green', '["Jane", 20, "green"]'],

['Mary', 21, 'blue', '["Mary", 21, "blue"]'], ]

frame = spark.createDataFrame(data, schema=["name", "age", "eye_color", "detail"])

frame.cache()

frame.show()

+-----+---+---------+--------------------+

| name|age|eye_color|              detail|

+-----+---+---------+--------------------+

|Alice| 19|     blue|["Alice", 19, "bl...|

| Jane| 20|    green|["Jane", 20, "gre...|

| Mary| 21|     blue|["Mary", 21, "blue"]|

+-----+---+---------+--------------------+

1、 增加常数项

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

frame2.show()

+-----+---+---------+--------------------+-------+

| name|age|eye_color|              detail|contant|

+-----+---+---------+--------------------+-------+

|Alice| 19|     blue|["Alice", 19, "bl...|     10|

| Jane| 20|    green|["Jane", 20, "gre...|     10|

| Mary| 21|     blue|["Mary", 21, "blue"]|     10|

+-----+---+---------+--------------------+-------+

2、简单根据某列进行计算

2.1 使用 withColumn

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

frame3_1.show()

+-----+---+---------+--------------------+-----------+

| name|age|eye_color|              detail|name_length|

+-----+---+---------+--------------------+-----------+

|Alice| 19|     blue|["Alice", 19, "bl...|          5|

| Jane| 20|    green|["Jane", 20, "gre...|          4|

| Mary| 21|     blue|["Mary", 21, "blue"]|          4|

+-----+---+---------+--------------------+-----------+

2.2 使用 select

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

frame3_2.show()

+-----+-----------+

| name|name_length|

+-----+-----------+

|Alice|          5|

| Jane|          4|

| Mary|          4|

+-----+-----------+

2.3 使用 selectExpr

frame3_3 = frame.selectExpr(["name", "length(name) as name_length"])

frame3_3.show()

+-----+-----------+

| name|name_length|

+-----+-----------+

|Alice|          5|

| Jane|          4|

| Mary|          4|

+-----+-----------+

3、定制化根据某列进行计算

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

frame4 = frame.withColumn("detail_length", functions.UserDefinedFunction(lambda obj: len(json.loads(obj)))(frame.detail))

# or

def length_detail(obj):

return len(json.loads(obj))

frame4 = frame.withColumn("detail_length", functions.UserDefinedFunction(length_detail)(frame.detail))

frame4.show()

+-----+---+---------+--------------------+-------------+

| name|age|eye_color|              detail|detail_length|

+-----+---+---------+--------------------+-------------+

|Alice| 19|     blue|["Alice", 19, "bl...|            3|

| Jane| 20|    green|["Jane", 20, "gre...|            3|

| Mary| 21|     blue|["Mary", 21, "blue"]|            3|

+-----+---+---------+--------------------+-------------+

到此这篇关于pyspark给dataframe增加新的一列的实现示例的文章就介绍到这了,更多相关pyspark dataframe增加列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值