我有一个包含一个非常大的整数值的数据帧,例如:
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)
在这里,我所得到的只是一个全零的列.
我该怎么办?
我将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
我正在尝试获取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曲线的一般/常用方法是什么?