小编Vit*_*ion的帖子

Apache Spark中不提供非线性SVM

avyone是否知道为什么非线性SVM尚未在Apache Spark中实现?我正在阅读这个页面:https: //issues.apache.org/jira/browse/SPARK-4638

看看最后的评论.它说:

"在这里评论最近开发列表线程的b/c:Spark中SVM的非线性内核很有用.主要障碍是:内核SVM训练难以分发.朴素的方法需要大量的沟通.这个功能进入Spark,我们需要做适当的背景研究并编写一个好的设计.其他ML算法可以说更需要并且仍然需要改进(截至本评论发布之日).树集合是第一和 - 最重要的是在我的脑海里."

问题是:为什么内核SVM很难分发?

众所周知,非线性SVM表现出比线性SVM更好的性能.

scala svm apache-spark apache-spark-mllib

7
推荐指数
0
解决办法
1040
查看次数

为什么 Spark 在创建 DataFrame 时推断出二进制而不是 Array[Byte]?

原则上,我有一个由“名称”“值”DataFrame字段组成的。第一个字段是 a ,第二个字段是 an 。StringArray[Byte]

我想要对每条记录执行的操作DataFrame是应用任何函数,使用 aUDF并创建一个新列。当“Values”是一个时,这非常有效Array[Int]。但是,当它是 时Array[Byte],会出现以下错误:

org.apache.spark.sql.AnalysisException: cannot resolve 'UDF(Values)' due to data type mismatch: argument 1 requires array<tinyint> type, however, '`Values`' is of binary type.;;
'Project [Name#47, Values#48, UDF(Values#48) AS TwoTimes#56]
+- Project [_1#44 AS Name#47, _2#45 AS Values#48]
+- SerializeFromObject [staticinvoke(class 
org.apache.spark.unsafe.types.UTF8String, StringType, fromString, assertnotnull(assertnotnull(input[0, scala.Tuple2, true]))._1, true) AS _1#44, assertnotnull(assertnotnull(input[0, scala.Tuple2, true]))._2 AS _2#45]
  +- ExternalRDD [obj#43]
Run Code Online (Sandbox Code Playgroud)

完整代码如下: …

binary scala user-defined-functions apache-spark apache-spark-sql

4
推荐指数
1
解决办法
7466
查看次数

从理论上讲,Scala比Apache Spark更快.实际上并非如此.这是怎么回事?

大家好日子.我会尝试解释我的问题,这样你就能理解我.

在一些地方我发现它认为Scala比Python更快:

另外,据说Scala是最适合在Apache Spark中运行应用程序的编程语言:

https://www.dezyre.com/article/scala-vs-python-for-apache-spark/213

但是,在这个网站上,另一个用户(@Mrityunjay)问了一个类似于我在这里提出的问题:

Scala与Python的Spark性能

在这篇文章中,来自@ zero323的回复强调了以下内容:

  1. @ zero323显示了用Scala编写的程序与Python编写的程序在性能上的巨大差异.
  2. @ zero323解释了如何使用ReduceByKey等操作可以显着影响Spark应用程序的性能.
  3. @ zero323用GroupByKey替换ReduceByKey操作,因此他可以提高@Mrityunjay提出的程序的性能.

一般来说,回复说明是特殊的,并且通过@ zero323在Scala和Python之间进行修改可以实现非常相似的执行时间.

考虑到这些信息,我给自己编写了一个简单程序的任务,这个程序可以让我解释我的应用程序发生的类似情况,突出显示我在Scala中的代码比用Python编写的代码慢.为此,我避免使用ReduceByKey操作,只使用了map操作.

我将尝试执行任何超复杂的操作,以最大化群集占用(96核,48 GB RAM)并实现大延迟.为此,该代码生成一组100万个人工数据(仅用于计算处理100万个数据的执行时间,无论它们是否被复制),其中包含标识符ID,长度为10的向量DoubleS.

由于我的应用程序是使用DataFrame实现的,我在Scala中创建了两个程序,一个使用RDD,另一个使用DataFrame,目的是观察问题是否使用DataFrame.同样,一个等效的程序是用Python编写的.

通常,操作应用于每个RDD/DataFrame记录,其结果放在附加字段中,从而生成包含原始字段的新RDD/DataFrame和包含结果的新字段.

这是Scala中的代码:

import org.apache.spark.sql.SparkSession
import scala.math.BigDecimal

object RDDvsDFMapComparison {
  def main(args: Array[String]) {

    val spark = SparkSession.builder().appName("Test").getOrCreate()
    val sc = spark.sparkContext
    import spark.implicits._

    val parts = 96
    val repl = 1000000
    val rep = 60000000

    val ary = (0 until 10).toArray
    val m = Array.ofDim[Int](repl, ary.length)
    for (i <- 0 until repl)
      m(i) = ary

    val …
Run Code Online (Sandbox Code Playgroud)

python scala dataframe apache-spark rdd

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