小编All*_*Han的帖子

如何使用类型别名定义类型构造函数

假设我有一些使用List的代码

def processList(input: List[Int]): List[Int]
Run Code Online (Sandbox Code Playgroud)

我想将列表替换为其他集合类型,例如Vector。

有没有一种定义类型构造函数的方法,这样我就可以写类似

type SomeCollection[_] = List[_]

def processList(input: SomeCollection[Int]): SomeCollection[Int]
Run Code Online (Sandbox Code Playgroud)

现在,我已根据SomeCollection编写了processList。要将SomeCollection更改为Vector,只需更改类型别名,在使用SomeCollection的代码库中的任何地方,我现在都使用Vector。像这样:

type SomeCollection[_] = Vector[_]

def processList(input: SomeCollection[Int]): SomeCollection[Int]
Run Code Online (Sandbox Code Playgroud)

这样,我只需要在一个地方而不是在任何地方更改代码库。

我不想写

type SomeIntCollection = List[Int]
Run Code Online (Sandbox Code Playgroud)

因为我已将集合连接到Int类型。

有办法吗?

scala type-alias type-constructor

5
推荐指数
1
解决办法
47
查看次数

对于“迭代算法”,转换为 RDD 然后再转换回 Dataframe 有什么优势

我正在阅读High Performance Spark,作者做出以下声明:

虽然 Catalyst 优化器非常强大,但它目前遇到挑战的情况之一是非常大的查询计划。这些查询计划往往是迭代算法的结果,例如图算法或机器学习算法。一个简单的解决方法是将数据转换为 RDD,并在每次迭代结束时转换回 DataFrame/Dataset,如例 3-58 所示。

示例 3-58 被标记为“通过 RDD 进行往返以削减查询计划”,并复制如下:

val rdd = df.rdd
rdd.cache()
sqlCtx.createDataFrame(rdd. df.schema)
Run Code Online (Sandbox Code Playgroud)

有谁知道需要此解决方法的根本原因是什么?

作为参考,已针对此问题提交了错误报告,可通过以下链接获取: https ://issues.apache.org/jira/browse/SPARK-13​​346

似乎没有解决办法,但维护者已经解决了这个问题,并且似乎不认为他们需要解决它。

apache-spark rdd apache-spark-sql catalyst-optimizer

5
推荐指数
1
解决办法
750
查看次数

应用仿函数评估对我来说并不清楚

我正在阅读"了解你是一个很好的Haskell!" 并且我对某个代码块的评估的解释感到磕磕绊绊.我已多次阅读这些解释,并开始怀疑即使是作者也能理解这段代码的作用.

ghci> (+) <$> (+3) <*> (*100) $ 5
508
Run Code Online (Sandbox Code Playgroud)

应用程序函数在某些上下文中将函数应用于某个上下文中的值,以在某些上下文中获得某些结果.我花了几个小时来研究这个代码块,并对这个表达式的评估方式提出了一些解释,但没有一个是令人满意的.我知道(5 + 3)+(5*100)是508,但问题是这个表达式.有没有人对这段代码有明确的解释?

haskell functional-programming applicative

3
推荐指数
3
解决办法
209
查看次数