代码之家  ›  专栏  ›  技术社区  ›  nicola

StringIndexerModel输入列

  •  1
  • nicola  · 技术社区  · 6 年前

    我有一个spark2.1的集群和一个进程,它在最后写入一个文件 PipelineModel StringIndexerModel . 我可以局部(使用spark 2.3)加载管道并检查 . 看起来非常奇怪的是,两个版本的方法和字段不同,即使它们读取相同的文件。特别是火花2.1的领域 inputCol

    这就是我得到的。

    pip1 = PipelineModel.load("somepath")
    si = pip1.stages[0]
    si
    #StringIndexer_494eb1f86ababc8540e2
    si.inputCol
    #Traceback (most recent call last):
    #  File "<stdin>", line 1, in <module>
    #AttributeError: 'StringIndexerModel' object has no attribute 'inputCol'
    

    火花2.3

    pip1 = PipelineModel.load("somepath")
    si = pip1.stages[0]
    si
    #StringIndexer_494eb1f86ababc8540e2
    si.inputCol
    #Param(parent='StringIndexer_494eb1f86ababc8540e2', name='inputCol', doc='input column name')
    

    我知道方法和字段可能会从一个版本更改为另一个版本,但是 一定是在物体的某个地方,因为制造 fit transform 工作。有没有办法提取 在spark 2.1和PySpark中?

    1 回复  |  直到 6 年前
        1
  •  2
  •   zero323 little_kid_pea    6 年前

    sparkml中的繁重工作是由内部Java对象完成的( _java_obj ),这就是为什么对象可以工作,即使内部对象在pythonapi中从未完全公开。当然,这限制了在不深入JavaAPI的情况下可以做的事情,因为Spark2.3 Params 暴露在PySpark模型中( SPARK-10931

    在以前的版本中,您可以访问内部模型,并从中获取数据。但是如果你想得到 Param 你应该使用 get* 方法,而不是

    si._java_obj.getInputCol()