gpt4 book ai didi

scala - 如何获取数据框中每一行每一列的值和类型?

转载 作者:行者123 更新时间:2023-12-01 13:35:32 24 4
gpt4 key购买 nike

如何将数据框转换为包含每列数据类型的元组?

我有许多不同大小和类型的数据框。我需要能够确定给定数据框的每一列和每一行的类型和值,以便我可以执行一些类型相关的操作。

例如,假设我有一个如下所示的数据框:

+-------+-------+
| foo | bar |
+-------+-------+
| 12345 | fnord |
| 42 | baz |
+-------+-------+

我需要得到

Seq(
(("12345", "Integer"), ("fnord", "String")),
(("42", "Integer"), ("baz", "String"))
)

或类似简单的迭代并以编程方式使用的东西。

提前致谢,我敢肯定,这是一个非常菜鸟的问题。

最佳答案

如果我理解你的问题是正确的,那么下面就是你的解决方案。

  val df = Seq(
(12345, "fnord"),
(42, "baz"))
.toDF("foo", "bar")

这会创建您已有的数据框。

+-----+-----+
| foo| bar|
+-----+-----+
|12345|fnord|
| 42| baz|
+-----+-----+

下一步是提取dataType来自 schemadataFrame并创建一个 iterator .

val fieldTypesList = df.schema.map(struct => struct.dataType)

下一步是转换 dataframe rows进入rdd列表和 map每个valuedataType来自 list在上面创建

  val dfList = df.rdd.map(row => row.toString().replace("[","").replace("]","").split(",").toList)
val tuples = dfList.map(list => list.map(value => (value, fieldTypesList(list.indexOf(value)))))

现在如果我们打印它

tuples.foreach(println)

它会给

List((12345,IntegerType), (fnord,StringType))
List((42,IntegerType), (baz,StringType))

您可以迭代并以编程方式使用它

关于scala - 如何获取数据框中每一行每一列的值和类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43665365/

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