我正面临着SparkML的OneHotEncoder问题,因为它读取数据帧元数据以确定它应该为其创建的稀疏矢量对象分配的值范围。如何更新Spark 2.1上的pyspark数据框元数据?
更具体而言,我使用含0 23之间和
所有单独的值现在我得分用“改造”方法OD单行数据帧的训练组编码的“小时”字段管道。
不幸的是,这导致了OneHotEncoder
一个不同编码稀疏矢量对象(24,[5],[1.0])与(11,[10],[1.0])
我已记录这here,但这被确定为重复。因此,在这个thread有发布到更新dataframes的元数据,以反映“小时”现场的实际范围的解决方案:
from pyspark.sql.functions import col
meta = {"ml_attr": {
"vals": [str(x) for x in range(6)], # Provide a set of levels
"type": "nominal",
"name": "class"}}
loaded.transform(
df.withColumn("class", col("class").alias("class", metadata=meta)))
Unfortunalely我得到这个错误:
TypeError: alias() got an unexpected keyword argument 'metadata'
您指向的指向是指Scala API;在pyspark 2.1中,'alias'方法没有'metadata'参数http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.Column.alias - this线程可能会更有用:https://stackoverflow.com/questions/44273080/how-to-change-column-metadata-in-pyspark – desertnaut
帮助,非常感谢。请作为回答发布,以便我可以upvote并接受 –
你是非常欢迎的 - 答复贴,信用归因 – desertnaut