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

来自元组的Spark RDD管道值

墨翔宇
2023-03-14

我有一个Spark RDD,其中每个元素都是(key,输入)形式的元组。我想使用管道方法将输入传递给外部可执行文件并生成(key,输出)形式的新RDD。我稍后需要键进行关联。

下面是使用火花壳的示例:

val data = sc.parallelize(
  Seq(
    ("file1", "one"),
    ("file2", "two two"),
    ("file3", "three three three")))

// Incorrectly processes the data (calls toString() on each tuple)
data.pipe("wc")

// Loses the keys, generates extraneous results
data.map( elem => elem._2 ).pipe("wc")

提前谢谢。

共有2个答案

华知
2023-03-14

考虑到您无法将标签传入/传出可执行文件,这可能行得通:

rdd
  .map(x => x._1)
  .zip(rdd
          .map(x => x._2)
          .pipe("my executable"))

请注意,这可能是脆弱的,如果您的可执行文件没有在每个输入记录上生成恰好一行,则肯定会中断。

逑何平
2023-03-14

使用map的解决方案是不正确的,因为map不能保证保留分区,因此在之后使用zip将失败。您需要使用mapValue来保留初始RDD的分区。

data.zip( 
  data.mapValues{ _.toString }.pipe("my_executable")
).map { case ((key, input), output) => 
  (key, output)
}
 类似资料:
  • 我有一个管道可以解析AVRO文件中的记录。 我需要将传入的记录分成500个项目的块,以便调用一个同时接受多个输入的API。 有没有办法用PythonSDK做到这一点?

  • 使装饰器包含具有name属性的管道元数据。 此值将用于在模板表达式中调用此管道。 它必须是有效的JavaScript标识符。 实现PipeTransform接口的transform方法。 此方法接受管道的值和任何类型的可变数量的参数,并返回一个变换的(“管道”)值。 import { Component } from '@angular/core'; selector: 'app-root',

  • 问题内容: 我试图让bash处理来自管道的stdin的数据,但是没有运气。我的意思是以下任何一项工作: 我希望输出在哪里。我试过用“”引号括住也不起作用。 问题答案: 采用 您 可以像这样欺骗从管道中接受: 甚至编写这样的函数: 但是没有意义-您的变量分配可能不会持续!管道可能会产生一个子外壳,其中环境是通过值而不是通过引用继承的。这就是为什么不打扰管道输入的原因- 它是未定义的。 仅供参考,ht

  • 该父级接收“props.id”并将数据值传递给由getAttributes()返回的子级。 在child上,我可以在控制台和componentWillReceiveProps中看到props值,但数组没有呈现。我尝试使用react-devtool。在react-devtool中,道具似乎传递给了孩子,但不是渲染。有趣的是,在react-devtool中,当我改变数组的一些元素时,数组正在呈现。 我

  • 但是,如果首先获取jenkinsfile时出现问题,则作业将以静默方式失败。如何在管道启动之前就从一般的作业启动失败中生成通知?