如何替换数据框的多列值

时间:2019-08-02 16:03:18

标签: scala apache-spark aws-glue

我已经通过使用

df.withColumn('username1', regexp_replace(col('username1'), 'Me', 'My')).withColumn('username2', regexp_replace(col('username2'), 'Me', 'My')).withColumn('username3', regexp_replace(col('username3'), 'Me', 'My'))

但是我只看到它受到username列和其他2列(username2username3)的影响,而不受此影响。

1 个答案:

答案 0 :(得分:0)

无法重现我的错误。遵循对我有用的示例代码。

import org.apache.spark.sql.types._

val schemaString = "username email ph"
val fields = schemaString.split(" ").map(fieldName => StructField(fieldName,StringType, nullable=true))

val schema = StructType(fields)

val rdd = sc.parallelize(List("me_name,me_name@yahoo.com,me_phone")).map(_.split(",")).map{x => org.apache.spark.sql.Row(x:_*)}

val df = spark.createDataFrame(rdd,schema)

val newDF = df.withColumn("username", regexp_replace(col("username"), "me", "my")).withColumn("email", regexp_replace(col("email"), "me", "my")).withColumn("ph", regexp_replace(col("ph"), "me", "my"))

查看数据框中的实际数据

df.show
+--------+-----------------+--------+
|username|            email|      ph|
+--------+-----------------+--------+
| me_name|me_name@yahoo.com|me_phone|
+--------+-----------------+--------+

现在让我们看一下转换后的数据

newDF.show
+--------+-----------------+--------+
|username|            email|      ph|
+--------+-----------------+--------+
| my_namy|my_namy@yahoo.com|my_phone|
+--------+-----------------+--------+

让我知道是否有帮助。