小编Igo*_*tov的帖子

如何将列值从字符串转换为十进制?

我有一个包含一个非常大的整数值的数据帧,例如:

42306810747081022358
Run Code Online (Sandbox Code Playgroud)

当我试图将它转换为长时间它在Java中工作但不在火花环境下,我得到了

   NumberFormatException: For input string("42306810747081022358")
Run Code Online (Sandbox Code Playgroud)

然后我试着将它转换为十进制(BigDecimal)值.同样,很容易在Java中完成它,但在Spark中:dframe.withColumn("c_number",col("c_a").cast(new DecimalType()));

这样我就不会得到任何异常,但是我可以看到所有结果值都是null.

我也试图使用UDF来达到这个目的但得到相同的结果:

UDF1 cTransformer = new UDF1<String, BigDecimal>() {
        @Override
        public BigDecimal call(String aString) throws Exception {
            return new BigDecimal(aString);
        }
    };
sqlContext.udf().register("cTransformer", cTransformer, new DecimalType());
dframe = dframe.withColumn("c_number", callUDF("cTransformer", dframe.col("c_a"))); 
Run Code Online (Sandbox Code Playgroud)

在这里,我所得到的只是一个全零的列.

我该怎么办?

java apache-spark apache-spark-sql

6
推荐指数
2
解决办法
8449
查看次数

有什么方法可以序列化Spark ML Pipeline中的自定义Transformer

我将ML管道与各种基于UDF的定制转换器一起使用。我正在寻找一种序列化/反序列化此管道的方法。

我使用以下方法序列化PipelineModel

ObjectOutputStream.write() 
Run Code Online (Sandbox Code Playgroud)

但是,每当我尝试反序列化管道时,我都会遇到:

java.lang.ClassNotFoundException: org.sparkexample.DateTransformer
Run Code Online (Sandbox Code Playgroud)

DateTransformer在哪里是我的自定义转换器。是否有实现适当序列化的方法/接口?

我发现那里

MLWritable
Run Code Online (Sandbox Code Playgroud)

我的课程可能实现的接口(DateTransformer扩展了Transfrormer),但是找不到有用的示例。

serialization apache-spark spark-dataframe apache-spark-mllib

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

绘制ROC曲线的常用方法

我正在尝试获取GBTClassifier的ROC曲线.

一种方法是重用BinaryClassificationMetrics,但文档中给出的路径(https://spark.apache.org/docs/latest/mllib-evaluation-metrics.html)仅为ROC曲线提供了4个值,如:

[0.0|0.0]
[0.0|0.9285714285714286]
[1.0|1.0]
[1.0|1.0]
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用"概率"列而不是"预测".但是,如果GBTClassifier我没有它,这个解决方案主要适用于RandomForestClassifier.

如何从BinaryClassificationMetrics绘制ROC曲线和精确回忆曲线

那么为任意分类器获得具有足够点的ROC曲线的一般/常用方法是什么?

machine-learning roc apache-spark apache-spark-mllib

5
推荐指数
0
解决办法
935
查看次数