当前位置: 首页 > 知识库问答 >
问题:

Spark数据帧zipWithIndex

长孙嘉
2023-03-14

我正在使用数据帧读取。拼花地板文件,但不是将它们转换为rdd来进行我的正常处理,我想对它们进行处理。

所以我有我的文件:

val dataSplit = sqlContext.parquetFile("input.parquet")
val convRDD = dataSplit.rdd 
val columnIndex = convRDD.flatMap(r => r.zipWithIndex)

即使从数据帧转换为RDD,我也会收到以下错误:

:26:错误:值zipWithIndex不是组织的成员。阿帕奇。火花sql。一行

任何人都知道如何做我正在尝试做的事情,本质上是尝试获取值和列索引。

我在想这样的事情:

val dataSplit = sqlContext.parquetFile(inputVal.toString)
val schema = dataSplit.schema
val columnIndex = dataSplit.flatMap(r => 0 until schema.length

但最后一部分被卡住了,因为不知道如何做zipWithIndex的相同操作。

共有1个答案

段溪叠
2023-03-14

您可以简单地将Row转换为Seq

convRDD.flatMap(r => r.toSeq.zipWithIndex)

这里需要注意的重要事情是提取类型信息变得棘手。Row.toSeq返回Seq[Any],结果RDDRDD[(Any, Int)]

 类似资料:
  • 我想了解如何在新的< code>DataFrame api中使用< code>CaseWhen表达式。 我在文档中看不到任何对它的引用,我唯一看到它的地方是在代码中:https://github . com/Apache/spark/blob/v 1 . 4 . 0/SQL/catalyst/src/main/Scala/org/Apache/spark/SQL/catalyst/expressi

  • null null 为什么要使用UDF/UADF而不是map(假设map保留在数据集表示中)?

  • 我正在考虑将dataset1分解为每个“T”类型的多个记录,然后与DataSet2连接。但是你能给我一个更好的方法,如果数据集变大了,它不会影响性能吗?

  • 我需要使用 spark-sql 加载一个 Hive 表,然后对其运行一些机器学习算法。我是这样写的: 它工作得很好,但如果我想增加数据集数据帧的分区数,我该怎么做?使用普通RDD,我可以写: 我想要有N个分区。 谢谢

  • 有人能解释一下将为Spark Dataframe创建的分区数量吗。 我知道对于RDD,在创建它时,我们可以提到如下分区的数量。 但是对于创建时的Spark数据帧,看起来我们没有像RDD那样指定分区数量的选项。 我认为唯一的可能性是,在创建数据帧后,我们可以使用重新分区API。 有人能告诉我在创建数据帧时,我们是否可以指定分区的数量。

  • 我正在尝试将熊猫DF转换为Spark one。测向头: 代码: 我得到了一个错误: