【发布时间】:2015-12-08 17:05:00
【问题描述】:
此示例中来自 spark-sql 的列名来自 case class Person。
case class Person(name: String, age: Int)
val people: RDD[Person] = ... // An RDD of case class objects, from the previous example.
// The RDD is implicitly converted to a SchemaRDD by createSchemaRDD, allowing it to be stored using Parquet.
people.saveAsParquetFile("people.parquet")
https://spark.apache.org/docs/1.1.0/sql-programming-guide.html
但是,在许多情况下,参数名称可能会更改。如果文件尚未更新以反映更改,这将导致找不到列。
如何指定合适的映射?
我在想这样的事情:
val schema = StructType(Seq(
StructField("name", StringType, nullable = false),
StructField("age", IntegerType, nullable = false)
))
val ps: Seq[Person] = ???
val personRDD = sc.parallelize(ps)
// Apply the schema to the RDD.
val personDF: DataFrame = sqlContext.createDataFrame(personRDD, schema)
【问题讨论】:
-
不幸的是,不清楚你想要什么。 1.用任意名字写拼花? 2. 之后更改拼花列名称? 3. 读取任意列名的 parquet 并将其“匹配”/映射到 case 类的字段?
-
@MartinSenne 怎么样?我想手动设置列名并将案例类参数映射到这些列。
-
但您打算让它们自动匹配?
-
@MartinSenne 请对此进行扩展。就像我说的我想手动匹配。
标签: scala apache-spark apache-spark-sql parquet