avyone是否知道为什么非线性SVM尚未在Apache Spark中实现?我正在阅读这个页面:https: //issues.apache.org/jira/browse/SPARK-4638
看看最后的评论.它说:
"在这里评论最近开发列表线程的b/c:Spark中SVM的非线性内核很有用.主要障碍是:内核SVM训练难以分发.朴素的方法需要大量的沟通.这个功能进入Spark,我们需要做适当的背景研究并编写一个好的设计.其他ML算法可以说更需要并且仍然需要改进(截至本评论发布之日).树集合是第一和 - 最重要的是在我的脑海里."
问题是:为什么内核SVM很难分发?
众所周知,非线性SVM表现出比线性SVM更好的性能.
原则上,我有一个由“名称”和“值”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
大家好日子.我会尝试解释我的问题,这样你就能理解我.
在一些地方我发现它认为Scala比Python更快:
另外,据说Scala是最适合在Apache Spark中运行应用程序的编程语言:
https://www.dezyre.com/article/scala-vs-python-for-apache-spark/213
但是,在这个网站上,另一个用户(@Mrityunjay)问了一个类似于我在这里提出的问题:
在这篇文章中,来自@ zero323的回复强调了以下内容:
一般来说,回复说明是特殊的,并且通过@ 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)