使用 FlatMap 使用 Spark 和 Scala 将列名称附加到元素
Attach column names to elements with Spark and Scala using FlatMap
对于给定的 table 喜欢
+--+--+
| A| B|
+--+--+
|aa|bb|
|cc|dd|
+--+--+
我想要一个像这样的数据框:
+---+---+
|._1|._2|
+---+---+
|aa | A |
|bb | B |
|cc | A |
|dd | B |
+---+---+
使用 Apache Spark 和 Scala。所以基本上我想要的元组在索引 0 处具有原始值,在索引 1 处具有列名。这应该适用于任何任意模式。这意味着列的数量是事先不知道的,据我所知,因此我无法转换为数据集。
这就是我试图解决它的方法:
val df = spark.read
.option("header", "true")
.option("sep",";")
.csv(path + "/tpch_nation.csv")
val cells = df.flatMap(tuple => {
tuple.toSeq.asInstanceOf[Seq[String]].zip(df.columns.toList)
})
cells.show()
然而,这会在 flatMap 函数中产生一个 java.lang.NullPointerException
。我很困惑哪个对象指向Null,我该如何解决这个问题。
不要在闭包中使用 df
。单独使用列
val columns = df.columns
val cells = df.flatMap(row => {
row.toSeq.map(_.toString).zip(columns)
})
或根本不使用:
val cells = df.flatMap(row => {
row.toSeq.map(_.toString).zip(row.schema.fieldNames)
})
还有:
对于给定的 table 喜欢
+--+--+
| A| B|
+--+--+
|aa|bb|
|cc|dd|
+--+--+
我想要一个像这样的数据框:
+---+---+
|._1|._2|
+---+---+
|aa | A |
|bb | B |
|cc | A |
|dd | B |
+---+---+
使用 Apache Spark 和 Scala。所以基本上我想要的元组在索引 0 处具有原始值,在索引 1 处具有列名。这应该适用于任何任意模式。这意味着列的数量是事先不知道的,据我所知,因此我无法转换为数据集。 这就是我试图解决它的方法:
val df = spark.read
.option("header", "true")
.option("sep",";")
.csv(path + "/tpch_nation.csv")
val cells = df.flatMap(tuple => {
tuple.toSeq.asInstanceOf[Seq[String]].zip(df.columns.toList)
})
cells.show()
然而,这会在 flatMap 函数中产生一个 java.lang.NullPointerException
。我很困惑哪个对象指向Null,我该如何解决这个问题。
不要在闭包中使用 df
。单独使用列
val columns = df.columns
val cells = df.flatMap(row => {
row.toSeq.map(_.toString).zip(columns)
})
或根本不使用:
val cells = df.flatMap(row => {
row.toSeq.map(_.toString).zip(row.schema.fieldNames)
})
还有: