小编the*_*ope的帖子

了解UID在Spark MLLib Transformer中的作用

我正在使用Apache Spark和Scala来创建ML管道.在我的管道中,我所拥有的变形金刚之一join在此过程中很早就进行了昂贵的操作.由于我有很多功能,ParamGrid这意味着程序必须保持这个巨大的,加入DataFrame内存,同时优化网格中的每个功能.

为了尝试解决这个问题,我创建了一个自定义Transformer缓存这个大型中间件的自定义,DataFrame通过将其写入S3中的镶木地板并返回从镶木地板中读取的DataFrame.这很好用,并提高了模型的速度,直到ParamGrid在缓存阶段之前添加了功能.当我将镶木地板写入S3时,我使用的路径由下式确定:

class Cacher(override val uid: String) extends Transformer {

  // the cachePath variable determines the path within the S3 bucket
  lazy val cachePath = Identifiable.randomUID(uid + "transformer-cache")

  // ...  
Run Code Online (Sandbox Code Playgroud)

我认为我误解了如何uid工作......我的信念是,无论什么时候Spark优化了ParamGrid,它都需要在管道中的那个阶段上演的任何类,创建它们的新实例,并给它们新的,独特的uids来跟踪他们 我怀疑缓存是错误的,因为Spark没有给它创建uid的新Transformer实例赋予独特性,这意味着无论何时Transformer创建缓存的新实例,缓存的镶木地板都会被不断覆盖.任何人都可以提供关于如何为uid管道创建的阶段的每个实例生成唯一的随机s的任何指针吗?

干杯!

scala apache-spark apache-spark-sql apache-spark-ml apache-spark-mllib

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