Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问Iterable元组(Scala)中的元素_Scala_Filter_Tuples_Rdd - Fatal编程技术网

如何访问Iterable元组(Scala)中的元素

如何访问Iterable元组(Scala)中的元素,scala,filter,tuples,rdd,Scala,Filter,Tuples,Rdd,我正在使用Scala创建一个应用程序,我正在努力理解一些事情 我的第一个问题是关于可数元组的: Iterable元组和Normal元组之间的区别是什么?何时以及如何使用它们 第二,关于我的申请更具体: 我有一个RDD,它有以下表格: (双精度,双精度),Iterable[(字符串,字符串)] 1st元组是键,而2nd包含一些值 现在让我们假设我想对我的RDD执行一个.filter()方法,使用第二个元组中的第一个元素。为此,我编写了如下代码: val filteredRDD = oldRDD.f

我正在使用Scala创建一个应用程序,我正在努力理解一些事情

我的第一个问题是关于可数元组的:

Iterable元组和Normal元组之间的区别是什么?何时以及如何使用它们

第二,关于我的申请更具体:

我有一个RDD,它有以下表格:

(双精度,双精度),Iterable[(字符串,字符串)]

1st元组是键,而2nd包含一些

现在让我们假设我想对我的RDD执行一个.filter()方法,使用第二个元组中的第一个元素。为此,我编写了如下代码:

val filteredRDD = oldRDD.filter{ case ((key,value)) => value.filter(x => x._1 == "some_string") } 
  • :是指第一个元组:(双精度,双精度)
  • :是指第二个元组:Iterable[(字符串,字符串)]
当我运行这行代码时,出现以下错误:

错误:类型不匹配;已找到:Iterable[(字符串, 字符串)]必填项:布尔值

然而,当我试图在第一个元组上使用过滤器时,如下所示:

val filteredRDD = oldRDD.filter{ case ((key,value)) => key._1 == 5.4 }  
一切正常

那么,基于第二元组第一个元素filter()方法正确方法是什么


非常感谢你,如果这听起来太愚蠢,请原谅。我不熟悉这种编码语言

您的rdd包含一个元组和一个元组的iterable?您需要首先选择第一个元素iterable,这意味着它是元组的集合,这意味着有很多元组。其次,RDD上的
过滤器
需要一个函数,该函数接收集合的一个元素并返回一个布尔值,该布尔值确定哪些元素应保留在返回的集合中,哪些元素不保留在返回的集合中。然后在内部调用另一个
过滤器
,这次是在Iterable上调用,然后再次调用
过滤器
,它将返回另一个Iterable,但第一个
过滤器
需要一个布尔值。你到底想做什么?filtereddd=oldRDD.filter{case((key,value))=>value.filter(x=>x.next()。_1==“some_string”)}@ariscant有很多种方法。。。如果需要集合的第一个元素,请使用
head
。如果需要最后一个元素,请使用
last
。如果需要第三个元素,请使用
apply(3)
。或者,您希望确保对于某些谓词持有的所有元素,都使用
forall
,或者您可能只关心是否至少有一个元素满足谓词use。这真的取决于你想做什么。你的rdd包含一个元组和一个元组的iterable?你需要首先选择第一个elementIterable,这意味着它是一个元组的集合,这意味着有很多元组。其次,RDD上的
过滤器
需要一个函数,该函数接收集合的一个元素并返回一个布尔值,该布尔值确定哪些元素应保留在返回的集合中,哪些元素不保留在返回的集合中。然后在内部调用另一个
过滤器
,这次是在Iterable上调用,然后再次调用
过滤器
,它将返回另一个Iterable,但第一个
过滤器
需要一个布尔值。你到底想做什么?filtereddd=oldRDD.filter{case((key,value))=>value.filter(x=>x.next()。_1==“some_string”)}@ariscant有很多种方法。。。如果需要集合的第一个元素,请使用
head
。如果需要最后一个元素,请使用
last
。如果需要第三个元素,请使用
apply(3)
。或者,您希望确保对于某些谓词持有的所有元素,都使用
forall
,或者您可能只关心是否至少有一个元素满足谓词use。这真的取决于你想做什么。