将转换应用于 Spark Scala 中的列
Applying transformation to column in Spark Scala
将以下转换应用于 Spark 2.40 Scala 中数据框中的列的最佳方法是什么。我正在尝试 udf 或 regex 替换但无法达到预期的结果。
column_1 在下面的例子中是一个字符串。
数据框输入:
column_1
#;#;Runner#;#;bob
#;#;#;
期望的结果
column_1
null#;null#;Runner#;null#;bob
null#;null#;null
解决方案:
遵循以下建议。这就是我解决问题的方式。在这种情况下,我先用逗号替换,然后用 #;
替换逗号分隔符
select_df
.withColumn("column_1", regexp_replace(col("column_1"), "(?<![a-zAZ0-9]),", "null,"))
.withColumn("column_1", regexp_replace(col("column_1"), ",]$", ",null"))
.withColumn("column_1", regexp_replace(col("column_1"), ",", "#;"))
您可以使用 regexp_replace 2 次以获得所需的输出。首先,替换#; (只有 #; 之前没有使用 negative look behind regex expression 的 Runner) by null#;然后替换结尾#;空字符串。
val spark = SparkSession.builder().master("local[*]").getOrCreate()
import spark.implicits._
spark.sparkContext.setLogLevel("ERROR")
val df = List("#;#;Runner#;#;bob", "#;#;#;").toDF(("column_1"))
df.withColumn("column_1", regexp_replace(
regexp_replace('column_1, "(?<![a-zA-Z]+)#;", "null#;"),"#;$", "")
)
.show(false)
+-----------------------------+
|column_1 |
+-----------------------------+
|null#;null#;Runner#;null#;bob|
|null#;null#;null |
+-----------------------------+
将以下转换应用于 Spark 2.40 Scala 中数据框中的列的最佳方法是什么。我正在尝试 udf 或 regex 替换但无法达到预期的结果。
column_1 在下面的例子中是一个字符串。
数据框输入:
column_1
#;#;Runner#;#;bob
#;#;#;
期望的结果
column_1
null#;null#;Runner#;null#;bob
null#;null#;null
解决方案:
遵循以下建议。这就是我解决问题的方式。在这种情况下,我先用逗号替换,然后用 #;
替换逗号分隔符select_df
.withColumn("column_1", regexp_replace(col("column_1"), "(?<![a-zAZ0-9]),", "null,"))
.withColumn("column_1", regexp_replace(col("column_1"), ",]$", ",null"))
.withColumn("column_1", regexp_replace(col("column_1"), ",", "#;"))
您可以使用 regexp_replace 2 次以获得所需的输出。首先,替换#; (只有 #; 之前没有使用 negative look behind regex expression 的 Runner) by null#;然后替换结尾#;空字符串。
val spark = SparkSession.builder().master("local[*]").getOrCreate()
import spark.implicits._
spark.sparkContext.setLogLevel("ERROR")
val df = List("#;#;Runner#;#;bob", "#;#;#;").toDF(("column_1"))
df.withColumn("column_1", regexp_replace(
regexp_replace('column_1, "(?<![a-zA-Z]+)#;", "null#;"),"#;$", "")
)
.show(false)
+-----------------------------+
|column_1 |
+-----------------------------+
|null#;null#;Runner#;null#;bob|
|null#;null#;null |
+-----------------------------+