我有一个从JSON对象创建的数据框。我可以查询此数据帧并将其写入镶木地板。
由于我推断出架构,因此我不一定知道数据框中的内容。
有没有办法列名出来或使用其自己的模式映射数据框?
// The results of SQL queries are DataFrames and support all the normal RDD operations.
// The columns of a row in the result can be accessed by field index:
df.map(t => "Name: " + t(0)).collect().foreach(println)
// or by field name:
df.map(t => "Name: " + t.getAs[String]("name")).collect().foreach(println)
// row.getValuesMap[T] retrieves multiple columns at once into a Map[String, T]
df.map(_.getValuesMap[Any](List("name", "age"))).collect().foreach(println)
// Map("name" -> "Justin", "age" -> 19)
我想做类似的事情
df.map (_.getValuesMap[Any](ListAll())).collect().foreach(println)
// Map ("name" -> "Justin", "age" -> 19, "color" -> "red")
不知道列的实际数量或名称。
好吧,您可以,但是结果却毫无用处:
val df = Seq(("Justin", 19, "red")).toDF("name", "age", "color")
def getValues(row: Row, names: Seq[String]) = names.map(
name => name -> row.getAs[Any](name)
).toMap
val names = df.columns
df.rdd.map(getValues(_, names)).first
// scala.collection.immutable.Map[String,Any] =
// Map(name -> Justin, age -> 19, color -> red)
要获得实际上有用的东西,可以在SQL类型和Scala类型之间进行适当的映射。在简单的情况下,这并不难,但在一般情况下却很难。例如,有一个内置类型可以用来表示任意类型struct
。可以使用一些元编程来做到这一点,但是可以说这并不值得大惊小怪。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句