【发布时间】:2019-06-10 02:00:42
【问题描述】:
看了一些技术文章,据说dataframe只知道列名不知道类型。但是,亲自调用dataframe的`printSchema函数后,可以打印出列的名称和类型。我对此非常怀疑。我期待着你的回答。
例子:
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SparkSession
case class Person(name:String,age:Long)
object DS {
def main(args: Array[String]): Unit = {
val config = new SparkConf().setAppName("sparkSql").setMaster("local[*]")
val sc = new SparkContext(config)
val spark = SparkSession.builder().config(config).getOrCreate()
val seq = Seq(("aa",1),("bb",2))
import spark.implicits._
val rdd = sc.makeRDD(seq)
val df = rdd.toDF("name","age")
val ds = rdd.map(line =>{Person(line._1,line._2)}).toDS()
println("dataframe schema:")
df.printSchema()
/*
dataframe schema:
root
|-- name: string (nullable = true)
|-- age: integer (nullable = true)
*/
println("dataset schema:")
ds.printSchema()
/*
dataset schema:
root
|-- name: string (nullable = true)
|-- age: long (nullable = true)
*/
}
}
对于这个例子,dataframe schema 的 age 类型是 integer , dataset schema 的 age 类型是 long , class Person 的 age 类型是 long 。
【问题讨论】:
标签: apache-spark dataframe apache-spark-sql dataset