dataframe行變換為列
阿新 • • 發佈:2018-09-28
href .html EDA docs www. oar cal cti 函數
新建一個 dataFrame
:
val conf = new SparkConf().setAppName("TTyb").setMaster("local") val sc = new SparkContext(conf) val spark: SQLContext = new SQLContext(sc) import org.apache.spark.sql.functions.explode import org.apache.spark.sql.functions.split import spark.implicits._ val dataFrame = spark.createDataFrame(Seq( (1, "example1", "a|b|c"), (2, "example2", "d|e") )).toDF("id", "name", "content")
需要將 content
的內容按照 |
分割,得到如下效果:
+---+--------+-------+
| id| name|content|
+---+--------+-------+
| 1|example1| a|
| 1|example1| b|
| 1|example1| c|
| 2|example2| d|
| 2|example2| e|
+---+--------+-------+
目前有兩種方式實現。
方式一
使用 import org.apache.spark.sql.functions
裏面的函數,具體的方式可以看 functions :
import org.apache.spark.sql.functions.{explode,split}
import spark.implicits._
dataFrame.withColumn("content", explode(split($"content", "[|]"))).show
方式二
使用 udf
,具體的方式可以看 spark使用udf給dataFrame新增列
import org.apache.spark.sql.functions.explode val stringtoArray =org.apache.spark.sql.functions.udf((content : String) => {content.split('|')}) dataFrame.withColumn("content", explode(stringtoArray(dataFrame("content")))).show
dataframe行變換為列