【问题标题】:How to convert a dataframe or RDD to a List of Tuples?如何将数据框或 RDD 转换为元组列表?
【发布时间】:2019-11-21 15:36:32
【问题描述】:

我有一个函数

def f(tuples: Seq[Product]) : Unit = if (tuples.size>0) {
   // etc using tuples.foreach( x=>  { ...  x.productIterator.foreach(...) })
}

并且需要通过 DataFrame f( myDF.rdd.? ) 调用它。 如何通过数据帧调用函数?
(或者如何转换?如何收集AsTuples?)

PS:需要一个“通用转换”,可能是 rdd.map(genericTuple),而不是解决方案专用元组。


反对者注意:应该是python solutions,但没有Scala 解决方案

【问题讨论】:

  • 返回单位,嗯,好像不太对
  • @PedroCorreiaLuís 是为了简化问题(真正的函数会生成一个文件到 FileSystem 并返回一些标志)。

标签: scala dataframe apache-spark tuples


【解决方案1】:

不确定问题是否足够清楚,但这可以帮助您:

您始终可以在Scala 上使用case class (https://docs.scala-lang.org/es/tutorials/tour/case-classes.html.html) 将您的DF 转换为Dataset,例如:df.as[YourCaseClass]

之后,如果您需要强制获取List,您可以在Dataset 上使用.collectAsList()

该列表中项目的数据类型将是您为初始 cast 定义的 case class

【讨论】:

  • .collectAsList() 是 Java,在 Scala 中只有 .collect(),它会返回一个 Array,然后你可以做一个 .toList
  • 这并不完全正确。 collectAsList 是 Java,是的,但它仍然可以被 Scala 使用,并且它不返回 Array,它返回一个 java.util.List[YourCaseClass]
  • 是的,但是使用Java列表和使用Java是一样的,不要那样做lol
  • “那种”...无论如何,我同意scala 原生替代方案是最好的:df.collect().toList
猜你喜欢
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多