如何做Spark 版本兼容
1个回答
展开全部
在Spark 1.6 时,大部分机器学习相关的类使用的向量还是
org.apache.spark.mllib.linalg.Vector
而到2.0后,已经基本都变更成
org.apache.spark.ml.linalg.Vector
同理对应的Vectors object 也是。这就造成了一个比较大的困难,比如下面的代码就很难做到兼容了,切换Spark就无法通过编译:
//定义一个函数,将一个字符串转化为Vector
val t = udf { (features: String) =>
if (!features.contains(":")) {
val v = features.split(",|\\s+").map(_.toDouble)
Vectors.dense(v)
} else {
val v = features.split(",|\\s+").map(_.split(":")).map(f => (f(0).toInt, f(1).toDouble))
Vectors.sparse(vectorSize, v)
}
org.apache.spark.mllib.linalg.Vector
而到2.0后,已经基本都变更成
org.apache.spark.ml.linalg.Vector
同理对应的Vectors object 也是。这就造成了一个比较大的困难,比如下面的代码就很难做到兼容了,切换Spark就无法通过编译:
//定义一个函数,将一个字符串转化为Vector
val t = udf { (features: String) =>
if (!features.contains(":")) {
val v = features.split(",|\\s+").map(_.toDouble)
Vectors.dense(v)
} else {
val v = features.split(",|\\s+").map(_.split(":")).map(f => (f(0).toInt, f(1).toDouble))
Vectors.sparse(vectorSize, v)
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询