如何将数据框转换为包含每列数据类型的元组?
我有许多不同大小和类型的数据框。我需要能够确定给定数据框的每一列和每一行的类型和值,以便我可以执行一些类型相关的操作。
例如,假设我有一个如下所示的数据框:
+-------+-------+
| 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
来自 schema
的 dataFrame
并创建一个 iterator
.
val fieldTypesList = df.schema.map(struct => struct.dataType)
下一步是转换 dataframe
rows
进入rdd
列表和 map
每个value
至 dataType
来自 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/