数据帧:将列名追加到行数据



我正在寻找一种将列名附加到数据框行数据的方法.列数可能不时不同

我已经火花 1.4.1

我有一个数据帧:

编辑::所有数据仅String类型

+---+----------+
|key|     value|
+---+----------+
|foo|       bar|
|bar|  one, two|
+---+----------+

我想得到 :

  +-------+---------------------+
  |key    |                value|
  +-------+---------------------+
  |key_foo|            value_bar|
  |key_bar| value_one, value_two|
  +---+-------------------------+ 

我试过了

 import org.apache.spark.sql._
 import org.apache.spark.sql.functions._
 val concatColNamesWithElems = udf { seq: Seq[Row] =>
     seq.map { case Row(y: String) => (col +"_"+y)}}

将数据帧另存为表(例如:dfTable),以便在其上编写 SQL。

df.registerTempTable("dfTable")

创建 UDF 并注册:我假设您的value列类型是 String

sqlContext.udf.register("prefix", (columnVal: String, prefix: String) =>
  columnVal.split(",").map(x => prefix + "_" + x.trim).mkString(", ")
)

在查询中使用 UDF

//prepare columns which have UDF and all column names with AS 
//Ex: prefix(key, "key") AS key // you can this representation 
val columns = df.columns.map(col => s"""prefix($col, "$col") AS $col """).mkString(",")

println(columns) //for testing how columns framed
val resultDf = sqlContext.sql("SELECT " + columns + " FROM dfTable")

相关内容

  • 没有找到相关文章

最新更新