将后缀附加到pyspark行

btqmn9zl  于 2021-05-16  发布在  Spark
关注(0)|答案(1)|浏览(413)

我有一个pyspark数据框,有两列 A 以及 B . 这些列中的每一列都是字符串数据类型。
下面是Dataframe的示例

|-------|-------|
|   A   |   B   |
|-------|-------| 
| "a1"  |  "b1" |
| "a2"  |  "b2" |
| "a3"  |  "b3" |
| "a4"  |  "b4" |
| "a5"  |  "b5" |
| "a6"  |  "b6" |
|-------|-------|

我想贴标签 _1 , _2 以及 _3 在随机选择的行中创建两个新列 A1 以及 B1 这样,Dataframe现在如下所示:

|-------|-------|---------|---------|
|   A   |   B   |    A1   |    B1   |
|-------|-------|---------|---------| 
| "a1"  |  "b1" | "a1_1"  |  "b1_1" |
| "a2"  |  "b2" | "a2_2"  |  "b2_2" |
| "a3"  |  "b3" | "a3_1"  |  "b3_1" |
| "a4"  |  "b4" | "a4_3"  |  "b4_3" |
| "a5"  |  "b5" | "a5_3"  |  "b5_3" |
| "a6"  |  "b6" | "a6_2"  |  "b6_2" |
|-------|-------|---------|---------|

这里有一些我需要注意的规则
每当给定后缀( _1 , _2 或者 _3 )附加到中行的末尾 A ,相同的后缀将附加到中同一行的末尾 B 也。
后缀特性的次数应该相同(或几乎相同)。在这个例子中,我们有三个后缀( _1 , _2 或者 _3 )每个后缀有两个特征。
附加给定后缀的行是随机选择的。
我想要一个解决方案,这对上述的例子工作。如何使用pyspark实现这一点?在我的实际Dataframe中,我希望看到接近一百万行和大约5个后缀。所以,一个有效的解决方案在这里会非常好。

xxe27gdn

xxe27gdn1#

import pyspark.sql.functions as F

# rand * 3 + 1 to give random numbers in (1,2,3)

df = df.withColumn("rand", (F.rand() * F.lit(3) + F.lit(1)).cast("int"))

a1 = F.concat(
    F.col("A"),
    F.lit("_"),
    F.col("rand")
).alias("A1")

b1 = F.concat(
    F.col("B"),
    F.lit("_"),
    F.col("rand")
).alias("B1")

df = df.select("A", "B", a1, b1)

相关问题