很久没有更新博客了,因为最近工作确实也很忙,不过忙碌的工作也让我收获了很多新的知识,趁着忙碌的间隙,来记录一下自己的成长。
这次的场景是:需要单独取出DataFrame中的某一列的所有值供Java程序使用。
下面的demo包含两个例子:
1.column value Type -> String, 即 row->String ,需要用到mkString这个方法
2.column value Type -> WrappedArray, 即Seq(String) ->String, 需要用到explode方法行转列增加一个column,即将每一个Seq中的每一个String值都取出放在新增列中生成一个row,例如
姓名 | 爱好 |
---|---|
张三 | {“唱歌”, “跳舞”} |
李四 | {“武术”} |
对爱好这一列用explode函数,我们会得到:
姓名 | 爱好 |
---|---|
张三 | “唱歌” |
张三 | “跳舞” |
李四 | “武术” |
之后就跟第一种情况一样row->String就可以了。
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types.StringType
import org.apache.spark.sql.{
DataFrame, SparkSession}
import org.json4s.jackson.Serialization
import scala.collection.JavaConversions.asScalaBuffer
import scala.collection.JavaConverters.mapAsScalaMapConverter
import scala.collection.immutable
import scala.util.matching.Regex
val spark = SparkSession.builder().appName("SparkSession").getOrCreate()
val wv = "/Pods/"