如何在Spark Scala中将(a1 | a2 | a3 b1 | b2 | b3)更改为((a1,a2,a3),(b1,b2,b3))

时间:2020-05-29 09:27:25

标签: dataframe apache-spark apache-spark-sql

在火花标量中将(a1 | a2 | a3 b1 | b2 | b3)转换为((a1,a2,a3),(b1,b2,b3))。

1 个答案:

答案 0 :(得分:0)

  1. 分割字符串以形成Seq
  2. 将Seq转换为DataFrame
  3. 在字符串后附加适当的前缀(和后缀)
  4. 地图行=>字符串
  5. 按列表收集数据框
  6. 将列表与,和前缀(和后缀)串联
import org.apache.spark.sql.functions._

object ParseAString {

  def main(args: Array[String]): Unit = {
    val spark = Constant.getSparkSess
    import spark.implicits._
    val inputStr = "a1|a2|a3 b1|b2|b3".split(" ").toSeq.toDF

    val result = inputStr
      .select( concat(lit("("),regexp_replace($"value","\\|",","),lit(")") ) )
      .map(row => {
        row.getString(0)
      })
      .collect().mkString(",")
    println(s"(${result})")

  }

}