Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
如何在RDD(Scala)上创建嵌套的forloop_Scala_Apache Spark_Rdd - Fatal编程技术网

如何在RDD(Scala)上创建嵌套的forloop

如何在RDD(Scala)上创建嵌套的forloop,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,我有一个RDD,它具有以下结构: ((ByteArray,Idx),((srcIdx,srcadres),(destIdx,destAddress))) 这是比特币区块链边缘(交易)的表示(ByteArray,Idx)可以看作是一个标识符,其余部分是一个边。我的最终目标是在区块链的图形表示中聚合节点。为此,我需要对结构进行的第一次修改是将同一比特币交易中的源放在一个边缘(最终放在一个节点)中。通过这种方式,我将“集群”属于同一用户的公钥。 此修改的结果将具有以下结构: ((ByteArray,I

我有一个RDD,它具有以下结构:
((ByteArray,Idx),((srcIdx,srcadres),(destIdx,destAddress)))

这是比特币区块链边缘(交易)的表示<代码>(ByteArray,Idx)可以看作是一个标识符,其余部分是一个边。我的最终目标是在区块链的图形表示中聚合节点。为此,我需要对结构进行的第一次修改是将同一比特币交易中的源放在一个边缘(最终放在一个节点)中。通过这种方式,我将“集群”属于同一用户的公钥。 此修改的结果将具有以下结构:
((ByteArray,Idx),(List((srcIdx,srcdAddress)),(destIdx,destAddress)))

或者以任何其他形式具有相同的功能(例如,如果这在Scala中不可能或不符合逻辑)

我目前的思考过程如下。在Java中,我将在RDD中的项上执行嵌套for循环,每个循环为具有相同键的项创建一个列表(
(ByteArray,Idx)
)。在此之后,删除任何重复项。 然而,由于我正在处理RDD和Scala,这是不可能的。接下来,我尝试在我的RDD上执行一个
.collect()
,然后执行一个单独的
.map()
函数,使用集合在我的map函数中循环。然而,Spark不喜欢这样,因为显然集合无法序列化。 接下来,我尝试创建一个“嵌套”映射函数,如下所示:

val aggregatedTransactions = joinedTransactions.map( f => {
  var list = List[Any](f._2._1)

  val filtered = joinedTransactions.filter(t => f._1 == t._1)

  for(i <- filtered){
    list ::= i._2._1
  }

  (f._1, list, f._2._2)
})
val aggregatedTransactions=joinedTransactions.map(f=>{
变量列表=列表[任何](f.\U 2.\U 1)
val filtered=joinedTransactions.filter(t=>f.\u 1==t.\u 1)
为了
我的最终目标是在区块链的图形表示中聚合节点。为此,我需要对结构进行的第一次修改是将同一比特币交易中的源放在一条边上(最终放在一个节点上)

因此,基本上您希望
groupByKey

joinedTransactions.groupByKey().map {
   // process data to get desired shape
}
我的最终目标是在区块链的图形表示中聚合节点。为此,我需要对结构进行的第一次修改是将同一比特币交易中的源放在一条边上(最终放在一个节点上)

因此,基本上您希望
groupByKey

joinedTransactions.groupByKey().map {
   // process data to get desired shape
}
嵌套RDD是不可能的,但是RDD中的集合是不可能的 可能

可使用的嵌套for循环

def笛卡尔[U](其他:RDD[U])(隐式arg0:ClassTag[U]):RDD[(T, U) ]Permalink返回此RDD和另一RDD的笛卡尔乘积 一,即a所在的所有元素对(a,b)的RDD 这个和b在另一个

使用Spark SQL您也可以实现它

嵌套RDD是不可能的,但是RDD中的集合是不可能的 可能

可使用的嵌套for循环

def笛卡尔[U](其他:RDD[U])(隐式arg0:ClassTag[U]):RDD[(T, U) ]Permalink返回此RDD和另一RDD的笛卡尔乘积 一,即a所在的所有元素对(a,b)的RDD 这个和b在另一个

使用Spark SQL您也可以实现它


我认为,鉴于您问题的性质,提供输入+输出示例以避免误解是很有用的。我认为,鉴于您问题的性质,提供输入+输出示例以避免误解是很有用的