【问题标题】:Append a Numpy array into a Pyspark Dataframe将 Numpy 数组附加到 Pyspark 数据帧中
【发布时间】:2021-03-19 01:08:39
【问题描述】:

我需要将 NumPy 数组附加到 PySpark 数据帧中。

结果需要是这样的,加上var38mc变量:

+----+------+-------------+-------+
|  ID|TARGET|        var38|var38mc|
+----+------+-------------+-------+
| 1.0|   0.0|  117310.9790|   True|
| 3.0|   0.0|  39205.17000|  False|
| 4.0|   0.0|  117310.9790|   True|
+----+------+-------------+-------+

首先,我计算了一个近似为117310.979016494 值的数组。

array_var38mc = np.isclose(train3.select("var38").rdd.flatMap(lambda x: x).collect(), 117310.979016494)

输出是一个对象numpy.ndarray,像这样[True, False, True]

接下来,我尝试附加一个 Numpy 数组,该数组之前使用相同的 PySpark.Dataframe 的数据计算得出。

train4 = train3.withColumn('var38mc',col(df_var38mc))

但是我收到了这个错误:

AttributeError: 'DataFrame' object has no attribute '_get_object_id'

P.S.:我尝试将 numpy 数组转换为列表并在另一个 PySpark Dataframe 中没有成功。

【问题讨论】:

    标签: python python-3.x apache-spark pyspark apache-spark-sql


    【解决方案1】:

    改用 UDF:

    import pyspark.sql.functions as F
    from pyspark.sql.types import BooleanType
    import numpy as np
    
    func = F.udf(lambda x: bool(np.isclose(x, 117310.979016494)), BooleanType())
    train4 = train3.withColumn('var38mc', func('var38'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-07
      • 2018-07-25
      • 1970-01-01
      • 2022-08-12
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多