使用列表中的每个值作为键值对中的键

Posted

技术标签:

【中文标题】使用列表中的每个值作为键值对中的键【英文标题】:Using each value in a list as key in key value pair 【发布时间】:2021-02-28 14:12:22 【问题描述】:

我正在尝试编写一个自定义函数,该函数采用 RDD,每条记录小写,将其拆分为字符,然后将每条记录用作键值对中的键,其中值始终为 1。我已经编写了另外两个自定义函数,分别进行小写和字符拆分,to_lower() 和 to_characters()。

我尝试了几种不同的方法,但到目前为止,我只能将整个列表作为键,而不是每条记录都在其自己的对中。

#Attempt 1
def rdd_to_character_value_pairs(rdd):
  lowerRDD = rdd.map(lambda x: to_lower(x))
  characterRDD = lowerRDD.map(lambda x: to_characters(x))
  pairedRDD = characterRDD.map(lambda x: ([char for char in characterRDD], 1))
return pairedRDD

#Attempt 2
def rdd_to_character_value_pairs(rdd):
  lowerRDD = rdd.map(lambda x: to_lower(x))
  characterRDD = lowerRDD.map(lambda x: to_characters(x))
  for i in characterRDD.collect():
     return ([char for char in characterRDD], 1)
     #have also tried return (i,1)

我了解您无法迭代 RDD,但我也无法找到任何解决方法。

【问题讨论】:

欢迎来到 SO!查看tour。你的问题到底是什么?我不熟悉 RDD,所以我不确定您是在寻找特定于它们的东西还是像 building a dict from a list of keys with all the same value 这样更通用的东西。在任何情况下,提供带有示例输入、所需输出和实际输出的minimal reproducible example 以及删除关于to_lowerto_characters 的内容也将有所帮助,因为它似乎与问题无关。你可以edit你的帖子。 顺便说一句,lambda x: func(x) 是多余的。只需改用func。我相信这被称为 eta-reduction ***.com/questions/36708338/… 【参考方案1】:
some_list = ["value1", "value2"]
some_dict = value_as_key: 'some_value' for value_as_key in some_list

输出:

'value1': 'some_value', 'value2': 'some_value'

【讨论】:

这个解决方案仍然给我一个 'PipelinedRDD' object is not iterable 错误

以上是关于使用列表中的每个值作为键值对中的键的主要内容,如果未能解决你的问题,请参考以下文章

如何在 scala 中生成的键值对中添加值

Redis之字典

javascript中数组取值的问题,如何取出键值对中的值?

JSON语法

将一个字典内的内value转换为集合:返回一个数组,此数组中包含输入字典的键值对中的数组的所有元素(为NSArray添加category)

java 怎么样获取Map中第几个键值对