SparkSQL--TextFile输出多列 2018-04-17 本文总阅读量次 123456789这个问题我在SparkSQL001里面提出过这个问题 解决的方法有很多 我看了很多同组的同学解决思路 大部分是用RDD函数式编程解决的 但是我觉得没有必要那么做 曾经我在工作的时候 有个人问过我这个问题 我当时解决过 就在刚刚我查看我的博客时候 决定把我的解决办法给总结一下 数据格式和内容 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748object TextFileApp { def main(args: Array[String]): Unit = { val spark = SparkSession.builder().appName("TextFileApp").master("local[2]").enableHiveSupport().getOrCreate() var df = spark.read.format("text").load("file:////Users/double_happy/Downloads/f16/data/text/man.txt") df.printSchema() df.show() df = df.withColumn("data",UDFUtils.string2fields(df.col("value"))) df = df.withColumn("id",df.col("data.id")) df = df.withColumn("age",df.col("data.age")) df.printSchema() df.show() }}结果是:root |-- value: string (nullable = true)+---------------+| value|+---------------+|double_happy,25|| Kairis,25|| Kite,32|+---------------+root |-- value: string (nullable = true) |-- data: struct (nullable = true) | |-- id: string (nullable = true) | |-- age: integer (nullable = false) |-- id: string (nullable = true) |-- age: integer (nullable = true)+---------------+------------------+------------+---+| value| data| id|age|+---------------+------------------+------------+---+|double_happy,25|[double_happy, 25]|double_happy| 25|| Kairis,25| [Kairis, 25]| Kairis| 25|| Kite,32| [Kite, 32]| Kite| 32|+---------------+------------------+------------+---+ 12345678910111213object UDFUtils { import org.apache.spark.sql.functions._ def string2fields=udf((data:String)=>{ DataFormat(data.split(",")(0),data.split(",")(1).toInt) }) case class DataFormat(id:String,age:Int)} 12345上面的解决办法明白了吗 ?定义一个udf函数即可 这个代码同时也解决了 struct类型的你应该怎么处理 之前的文章也提到过这个问题 这里给解决了 Zookeeper基本使用与监控(Curator) 雅恩资源调优---double_happy