我正在尝试对另一列作为分隔符的列执行子字符串选项,像substring_index()这样的方法需要字符串值,有人可以建议吗?
答案 0 :(得分:1)
substring_index将其定义为substring_index(Column str, String delim, int count)
因此,如果您在该列的所有字符串中都有一个公共分隔符
+-------------+----+
|col1 |col2|
+-------------+----+
|a,b,c |, |
|d,e,f |, |
|Jonh,is,going|, |
+-------------+----+
您可以将此功能用作
import org.apache.spark.sql.functions._
df.withColumn("splitted", substring_index(col("col1"), ",", 1))
哪个应该给出结果
+-------------+----+--------+
|col1 |col2|splitted|
+-------------+----+--------+
|a,b,c |, |a |
|d,e,f |, |d |
|Jonh,is,going|, |Jonh |
+-------------+----+--------+
不同行上的不同拆分分隔符
如果在不同的行上有不同的拆分分隔符
+-------------+----+
|col1 |col2|
+-------------+----+
|a,b,c |, |
|d$e$f |$ |
|jonh|is|going|| |
+-------------+----+
您可以将udf function定义为
import org.apache.spark.sql.functions._
def subStringIndex = udf((string: String, delimiter: String) => string.substring(0, string.indexOf(delimiter)))
并使用.withColumn
api将其称为
df.withColumn("splitted", subStringIndex(col("col1"), col("col2")))
最终输出是
+-------------+----+--------+
|col1 |col2|splitted|
+-------------+----+--------+
|a,b,c |, |a |
|d$e$f |$ |d |
|jonh|is|going|| |jonh |
+-------------+----+--------+
我希望答案很有帮助
答案 1 :(得分:0)
您可以尝试使用两个不同的列作为参数调用相关的配置单元UDF。