【问题标题】:VectorAssembler creates string values instead of original integersVectorAssembler 创建字符串值而不是原始整数
【发布时间】:2021-04-01 10:02:25
【问题描述】:

我有以下 PySpark DataFrame df

df.printSchema()


 |-- yearday: integer (nullable = true)
 |-- month: integer (nullable = true)
 |-- dayofweek: integer (nullable = true)
 |-- year: integer (nullable = true)

当我应用 VectorAssembler 时,features 将转换为 string 值,而不是原始的 integer 值。

from pyspark.ml.feature import VectorAssembler

vectorAssembler = VectorAssembler(inputCols = ['yearday', 'month', 'dayofweek', 'year'], outputCol = 'features')
df = vectorAssembler.transform(df)
df.select(['features']).show()

这是输出的样子:

如何获取features 中的整数?

【问题讨论】:

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


    【解决方案1】:

    我怀疑这是一个显示错误...它应该是一个整数。试试下面的代码来确认向量包含什么类型。

    from pyspark.ml.param import TypeConverters
    
    print(TypeConverters.toList(df.select('features').take(1)[0][0]))
    

    【讨论】:

    • 我得到这个输出:[286.0, 10.0, 3.0, 2015.0, 4.0, 42.0, 3.0, 0.0, 15.0]。然后,我不明白为什么这段代码会失败gbt = GBTRegressor(featuresCol = 'features', labelCol = 'data') fitted = gbt.fit(df),并出现错误pyspark.sql.utils.IllegalArgumentException: requirement failed: Column data must be of type numeric but was actually of type string.。我认为这个错误是由df中的字符串值引起的,但现在我无法理解原因。
    • 它抱怨data 列是字符串类型。标签/数据列是什么样的?
    • 哦,对了!确实printSchema 表明data 是一个字符串。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多