将row_number添加到数据帧pyspark中的级联列

核磁共振

我在下面有一个数据框 pyspark

df = sqlContext.createDataFrame(
[(1,'Y','Y',0,0,0,2,'Y','N','Y','Y'),
(2,'N','Y',2,1,2,3,'N','Y','Y','N'),
(3,'Y','N',3,1,0,0,'N','N','N','N'),
(4,'N','Y',5,0,1,0,'N','N','N','Y'),
(5,'Y','N',2,2,0,1,'Y','N','N','Y'),
(6,'Y','Y',0,0,3,6,'Y','N','Y','N'),
(7,'N','N',1,1,3,4,'N','Y','N','Y'),
(8,'Y','Y',1,1,2,0,'Y','Y','N','N')
],
('id', 'compatible', 'product', 'ios', 'pc', 'other', 'devices', 'customer', 'subscriber', 'circle', 'smb')
)

现在,我想bt_string通过串联一些字符串在数据框中创建一个新列我已经完成如下

import pyspark.sql.functions as f
from datetime import datetime
from time import strftime
from pyspark.sql import Window

# the below values will change as per requirement
job_id = '123'
sess_id = '99'
batch_id = '1'
time_now = datetime.now().strftime('%Y%m%d%H%M%S')

con_string = job_id + sess_id + batch_id + time_now + '000000000000000'

df1 = df.withColumn('bt_string', f.lit(con_string))

现在,我要为数据框分配每行唯一的编号。我应用了row_number如下功能

df2 = df1.withColumn("row_id",f.row_number().over(Window.partitionBy()))

输出如下

df2.show()  

+---+----------+-------+---+---+-----+-------+--------+----------+------+---+--------------------+------+
| id|compatible|product|ios| pc|other|devices|customer|subscriber|circle|smb|           bt_string|row_id|
+---+----------+-------+---+---+-----+-------+--------+----------+------+---+--------------------+------+
|  1|         Y|      Y|  0|  0|    0|      2|       Y|         N|     Y|  Y|12399120210301120...|     1|
|  2|         N|      Y|  2|  1|    2|      3|       N|         Y|     Y|  N|12399120210301120...|     2|
|  3|         Y|      N|  3|  1|    0|      0|       N|         N|     N|  N|12399120210301120...|     3|
|  4|         N|      Y|  5|  0|    1|      0|       N|         N|     N|  Y|12399120210301120...|     4|
|  5|         Y|      N|  2|  2|    0|      1|       Y|         N|     N|  Y|12399120210301120...|     5|
|  6|         Y|      Y|  0|  0|    3|      6|       Y|         N|     Y|  N|12399120210301120...|     6|
|  7|         N|      N|  1|  1|    3|      4|       N|         Y|     N|  Y|12399120210301120...|     7|
|  8|         Y|      Y|  1|  1|    2|      0|       Y|         Y|     N|  N|12399120210301120...|     8|
+---+----------+-------+---+---+-----+-------+--------+----------+------+---+--------------------+------+

现在,我想将row_id添加bt_string列中。我的意思是像下面

如果bt_string1st

1239912021030112091500000000000000 then add the corresponding row_id value. 
In the case of first row the value will be 1239912021030112091500000000000001

创建的新列应具有如下所示的值

1239912021030112091500000000000001
1239912021030112091500000000000002
1239912021030112091500000000000003
1239912021030112091500000000000004
1239912021030112091500000000000005
1239912021030112091500000000000006
1239912021030112091500000000000007
1239912021030112091500000000000008

还需要确保该列的长度应始终为35字符。

下面的字符串应不超过35字符长度,不计任何费用

con_string = job_id + sess_id + batch_id + time_now + '000000000000000' 

如果它超过了35长度字符,那么我们需要在上面的语句trimzeros增加数量

我怎样才能实现自己想要的

用户12345

请按照以下步骤操作来达到目的

# import necessary functions
import pyspark.sql.functions as f
from datetime import datetime
from time import strftime
from pyspark.sql import Window

# assign variables as per requirement 
job_id = '123'
sess_id = '99'
batch_id = '1'
time_now = datetime.now().strftime('%Y%m%d%H%M%S')

# Join variables to get desired format of base string
con_string =  job_id + sess_id + batch_id + time_now

# check length of base string and subtract from max length for that column 35 
zero_to_add = 35 - len(con_string)

# Add the numbers of zeros based on the value received above
new_bt_string = con_string + zero_to_add * '0'

# add new column and convert column to decimal and then apply row_number
df1 = df.withColumn('bt_string', f.lit(new_bt_string).cast('decimal(35,0)'))\
    .withColumn("row_id",f.row_number().over(Window.partitionBy()))

# add new column by sum of values from above added columns
df2 = df1.withColumn('bt_id', f.expr('bt_string + row_id'))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将row_number添加到最大值

来自分类Dev

按比例将刻度列添加到数据帧

来自分类Dev

将循环结果添加到R中的数据帧

来自分类Dev

尝试将多个顺序编号列添加到R中的数据帧

来自分类Dev

将多个相同长度的时间序列数据帧添加到一列中

来自分类Dev

无法将总列添加到现有的索引数据帧中

来自分类Dev

SQL ROW_NUMBER添加到变量

来自分类Dev

Pyspark:将数据框值添加到指定列中的每个不同值

来自分类Dev

如何根据其他数据帧的行将新列添加到数据帧中?

来自分类Dev

在R中的数据帧列表中将row_number()分配为列值

来自分类Dev

将级联添加到SQL Server中的存在表

来自分类Dev

如何将包含可解析字段的字符串添加到可以添加到数据帧的列中

来自分类Dev

如何在R中使用paste0()将列添加到数据帧列表中?

来自分类Dev

将行中的数据添加到 R 中的列

来自分类常见问题

将列动态添加到R中的数据框

来自分类Dev

将数据添加到DataGrid中的特定列

来自分类Dev

将列动态添加到R中的数据框

来自分类Dev

将整数添加到数据库中的列

来自分类Dev

将列表数组添加到数据网格列中

来自分类Dev

如何将列添加到数据框中?

来自分类Dev

如何将 JSON 对象添加到 apache spark 中的数据集/数据帧

来自分类Dev

尝试添加ROW_NUMBER时是否可以删除此查询中的级联CTE

来自分类Dev

在Pyspark中,如何将值列表作为新列添加到现有数据框?

来自分类Dev

R:使用lapply将新列添加到数据帧列表

来自分类Dev

仅将数据帧中的新行添加到csv文件中

来自分类Dev

根据该行 R 中的名称将变量添加到特定行中的数据帧

来自分类Dev

将新列从另一个数据帧添加到长数据帧?

来自分类Dev

根据作为数据帧超集的现有向量将列添加到R数据帧

来自分类Dev

如何将数据帧名称添加到来自多个数据帧的列

Related 相关文章

  1. 1

    将row_number添加到最大值

  2. 2

    按比例将刻度列添加到数据帧

  3. 3

    将循环结果添加到R中的数据帧

  4. 4

    尝试将多个顺序编号列添加到R中的数据帧

  5. 5

    将多个相同长度的时间序列数据帧添加到一列中

  6. 6

    无法将总列添加到现有的索引数据帧中

  7. 7

    SQL ROW_NUMBER添加到变量

  8. 8

    Pyspark:将数据框值添加到指定列中的每个不同值

  9. 9

    如何根据其他数据帧的行将新列添加到数据帧中?

  10. 10

    在R中的数据帧列表中将row_number()分配为列值

  11. 11

    将级联添加到SQL Server中的存在表

  12. 12

    如何将包含可解析字段的字符串添加到可以添加到数据帧的列中

  13. 13

    如何在R中使用paste0()将列添加到数据帧列表中?

  14. 14

    将行中的数据添加到 R 中的列

  15. 15

    将列动态添加到R中的数据框

  16. 16

    将数据添加到DataGrid中的特定列

  17. 17

    将列动态添加到R中的数据框

  18. 18

    将整数添加到数据库中的列

  19. 19

    将列表数组添加到数据网格列中

  20. 20

    如何将列添加到数据框中?

  21. 21

    如何将 JSON 对象添加到 apache spark 中的数据集/数据帧

  22. 22

    尝试添加ROW_NUMBER时是否可以删除此查询中的级联CTE

  23. 23

    在Pyspark中,如何将值列表作为新列添加到现有数据框?

  24. 24

    R:使用lapply将新列添加到数据帧列表

  25. 25

    仅将数据帧中的新行添加到csv文件中

  26. 26

    根据该行 R 中的名称将变量添加到特定行中的数据帧

  27. 27

    将新列从另一个数据帧添加到长数据帧?

  28. 28

    根据作为数据帧超集的现有向量将列添加到R数据帧

  29. 29

    如何将数据帧名称添加到来自多个数据帧的列

热门标签

归档