当前位置: 首页 > 面试题库 >

pyspark mapPartitions函数如何工作?

公羊晟
2023-03-14
问题内容

所以我正在尝试使用Python(Pyspark)学习Spark。我想知道该功能的mapPartitions工作原理。那就是它所需要的输入和它所提供的输出。我在互联网上找不到任何合适的例子。可以说,我有一个包含列表的RDD对象,如下所示。

[ [1, 2, 3], [3, 2, 4], [5, 2, 7] ]

我想从所有列表中删除元素2,如何使用来实现mapPartitions


问题答案:

应该将mapPartition视为对分区而不是对分区元素的映射操作。它的输入是当前分区的集合,其输出将是另一分区的集合。

您传递的功能图必须包含RDD中的单个元素

传递给mapPartition的函数必须采用RDD类型的可迭代函数,并返回其他或相同类型的可迭代函数。

在您的情况下,您可能只想做类似的事情

def filter_out_2(line):
    return [x for x in line if x != 2]

filtered_lists = data.map(filterOut2)

如果您想使用mapPartition,它将是

def filter_out_2_from_partition(list_of_lists):
  final_iterator = []
  for sub_list in list_of_lists:
    final_iterator.append( [x for x in sub_list if x != 2])
  return iter(final_iterator)

filtered_lists = data.mapPartition(filterOut2FromPartion)


 类似资料:
  • 问题内容: python split方法内部实际上有什么作用? 问题答案: 原始字符串与Python字符串 的 [R 是 表明 它是一个 原始字符串 。 原始字符串与常规python字符串有何不同? 该 特殊字符失去 其 内部特殊的意义 一个 原始字符串 。例如,python字符串中的换行符将在原始字符串中失去其含义,仅表示反斜杠后跟n。 将中断和拆分传递的参数,并返回列表中的所有部分。该列表将不

  • 问题内容: 如果我写 然后给出0、1、2、3、4,这 是否意味着Python同时向i分配了0、1、2、3、4? 但是,如果我写了: 然后我叫a,它只给出5, 但是如果我加上“ print a”,它得到1、2、3、4、5。 所以我的问题是,这有什么区别? 是字符串还是列表还是其他? 也许有人可以帮助我进行梳理: 如果运行此类代码,则仅当l = 5时才能得到答案。 如何使它们开始循环? 即l = 0获

  • 问题内容: 试图了解和内置函数的工作方式。 我正在尝试比较元组,以便如果任何值不同,则它将返回,如果它们都相同,则将返回。在这种情况下,他们如何工作以返回[False,False,False]? 是一个。 据我所知,这应该输出 因为相同,不同,并且相同。 为什么对所有元组求值为False? 问题答案: 你可以粗略地认为和作为系列的逻辑和分别运营。 任何 当至少一个元素是 时将返回。阅读有关真值测试

  • 问题内容: 为什么即使调用时返回并退出,嵌套函数仍会记住第一个值? 问题答案: 您可以看到它,因为所有源自父函数的变量都被子函数内的实际值替换。这样,无需跟踪父函数的范围即可使子函数正确运行。 将其视为“动态创建函数”。 这是python中的基本行为,对多个分配也是如此。 Python将其读取为 基本上,在对它们执行任何操作之前会先插入值。

  • 我觉得我的知识的函数式编程是有点缺乏所以我决定看看网上并按照教程得到更好的当我凸轮通过它的状态在第一页 “假设您有一个不可变的数字列表xs=[1,2,3,4,5,6,7,8]和一个函数doubleMe,该函数将每个元素乘以2,然后返回一个新列表。如果我们想用命令式语言将列表乘以8,并执行doubleMe(doubleMe(xs)))),它可能会通过列表一次,复制一份,然后返回。然后,它将再次通过列

  • 当模拟对象中具有相同参数列表的方法返回值时,如果存在冲突语句,我观察到将返回最近的When/thenReturn。因此,下面的陈述将是正确的。 当有冲突语句抛出异常时,行为与上面不一样。例如, 这个测试用例失败了。任何解释都会有帮助。