往往对df增加列是比较常见的操作,df合并,转rdd之类的操作
有下面几种方式:
import org.apache.spark.sql.functions._
1、如果增加的列是基于df列的变化
//新增一列以oldColName * 2 为新列,$"oldColName" 相当于 col("oldColName")
df.withColumn("newColName", $"oldColName"*2)
2、以UDF方式增加
val cmsUrlPatten = """(^http[s]?://.+_)[0-9]+\.(shtml|html){1}.*""".r
def url2cms(url: String): String = {
val tagUrl = url.split("\\?")(0)
if (cmsUrlPatten.findAllIn(tagUrl).isEmpty) url
else {
val cmsUrlPatten(urlPre, urlEnd) = tagUrl
s"${urlPre}1.$urlEnd"
}
}
val sqlfunc = udf((arg: String) => url2cms(arg))
trafficDF.withColumn("cmsUrl", sqlfunc($"url"))