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增加列内容请搜索python博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持python博客!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值