gpt4 book ai didi

scala - 使用数据框模式的 Spark map 数据框

转载 作者:行者123 更新时间:2023-12-02 00:53:46 25 4
gpt4 key购买 nike

我有一个从 JSON 对象创建的数据框。我可以查询此数据框并将其写入 Parquet 。

由于我推断模式,所以我不一定知道数据框中有什么。

有没有办法使用自己的模式来提取列名或映射数据框?

// 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。这可以使用一点元编程来完成,但可以说这不值得大惊小怪。

关于scala - 使用数据框模式的 Spark map 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37485536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com