【问题标题】:How to attach metadata to a double column in pyspark如何将元数据附加到pyspark中的双列
【发布时间】:2017-02-16 14:30:03
【问题描述】:

我在数据框中有一个 double-typed 列,其中包含随机森林训练集的类标签。
我想手动将元数据附加到该列,这样我就不必传递按照another question 中的建议将数据框转换为StringIndexer
执行此操作的最简单方法似乎是使用Columnas 方法。
但是,此方法在Python 中不可用。

有简单的解决方法吗?

如果没有简单的解决方法,而最好的方法是as 的 Python 端口,那么为什么没有在 Python 中移植该方法?
是否存在困难的技术原因,而不仅仅是因为它与 @ 冲突Python 中的 987654328@ 关键字并且没有人自愿移植它?

查看source code,发现Python中的alias方法内部调用了Scala中的as方法。

【问题讨论】:

    标签: apache-spark pyspark pyspark-sql apache-spark-ml


    【解决方案1】:
    import json
    from pyspark.sql.column import Column
    
    def add_meta(col, metadata):
        meta = sc._jvm.org.apache.spark.sql.types\
                 .Metadata.fromJson(json.dumps(metadata))
        return Column(getattr(col._jc, "as")('', meta))
    
    # sample invocation
    df.withColumn('label', 
                   add_meta(df.classification, 
                            {"ml_attr": {
                                 "name": "label", 
                                 "type": "nominal", 
                                 "vals": ["0.0", "1.0"]
                                    }
                            }))\
      .show()
    

    此解决方案涉及在 Python 中调用 as(alias: String, metadata: Metadata) Scala 方法。它可以通过getattr(col._jc, "as") 检索,其中col 是一个数据框列(Column 对象)。

    然后必须使用两个参数调用此返回的函数。第一个参数只是一个字符串,第二个参数是Metadata。该对象是通过调用 Metadata.fromJson() 创建的,它需要一个 JSON 字符串作为参数。该方法通过 Spark 上下文的 _jvm 属性检索。

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 2016-05-20
      • 2020-09-05
      • 1970-01-01
      相关资源
      最近更新 更多