Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Scala 将Spark RDD视为普通序列_Scala_Apache Spark_Functional Programming_Rdd - Fatal编程技术网

Scala 将Spark RDD视为普通序列

Scala 将Spark RDD视为普通序列,scala,apache-spark,functional-programming,rdd,Scala,Apache Spark,Functional Programming,Rdd,我有一个用于转换JSON的CLI应用程序。它的大部分代码是mapping、flatMapping,并使用for值列表进行遍历。现在我想将此应用程序移植到Spark,但似乎我需要将所有函数重写为1:1,但要编写RDD[JValue]而不是List[JValue] 函数是否有任何方法(如类型类)可以同时接受列表和RDD。如果您想共享用于处理本地和抽象代码的代码,您可以将传递到map/flatMap的lambdas/anaonymous函数移动到命名函数中并重新使用它们 如果你想重新使用你的逻辑来排列

我有一个用于转换JSON的CLI应用程序。它的大部分代码是
map
ping、
flatMap
ping,并使用
for
值列表进行遍历。现在我想将此应用程序移植到Spark,但似乎我需要将所有函数重写为1:1,但要编写
RDD[JValue]
而不是
List[JValue]


函数是否有任何方法(如类型类)可以同时接受列表和RDD。

如果您想共享用于处理本地和抽象代码的代码,您可以将传递到
map
/
flatMap
的lambdas/anaonymous函数移动到命名函数中并重新使用它们


如果你想重新使用你的逻辑来排列地图/平面地图/等等,你也可以在
RDD
Seq
之间创建一个隐式转换,以获得一个自定义特性,该特性只有共享的函数,但是隐式转换会变得非常混乱,我认为这不是一个好主意(但如果你不同意我的观点,你可以这样做:)。

我认为转换实际上需要动作,因此RDD将被计算。事实上,你还必须有一个动作在你的共同特征中,它才能做一些工作。我真的认为正确的方法是将我们的共享逻辑分解到map/flatMap/etc中,如果这对您有效的话。谢谢。如果我找不到更合适的,那可能是我的选择。问题是lambda函数现在组合成了更大的函数,所以分解会让它有点丑陋。我还考虑使用
或者
。map-on-List和on-RDD的方法签名不一样,所以这将是一个难题。您可以使用类型类方法,为它们的映射定义自己的包装器,并为两者提供一个实例。如果您可以定义scalaz monad并遍历RDD的实例,您可能可以使用它。我认为函子应该不会有问题。但乍一看,RDD并没有遵守Monad定律,若RDD不遵守Monad定律,那个么您就无法使用scalaz typeclass进行平面映射。也就是说,您可能能够实现一个不遵守法律的版本,并且它可能适合您的特定需求。类似于提供ValidationFlatMapHm。也许这就是路。例如,我知道scala的未来也不是monad,但它提供了平面图并像monad一样处理。谢谢,我会试试。suhailshergill有一些与您的问题相关的代码: