将列表转换为 pyspark 数据框

Posted

技术标签:

【中文标题】将列表转换为 pyspark 数据框【英文标题】:Transforming a list into pyspark dataframe 【发布时间】:2017-10-19 07:23:32 【问题描述】:

使用pyspark 2.1,我试图找到一些预测结果,代码如下

restultSet=testingData.map(lambda p: (p.label, linearModel.predict(p.features))).collect()

现在 restultSet 的输出在列表中,如下所示

[(2.0, array([ 2.09078012])), (2.0, array([ 2.09078012])), (2.0, array([ 2.09078012])), (1.0, array([ 2.09078012])), (2.0, array([ 2.09078012])), (1.0, array([ 2.09078012]))]

当我给出类型(restultSet)时,它会在结果下方显示我

我正在努力从列表转换为数据框

我尝试在 sn-ps 下面使用它不起作用。请帮忙

restultSet.toDF()

【问题讨论】:

【参考方案1】:

您无法将 restultSet 转换为 Spark 数据帧,因为由于 collect,它是一个 Python 列表,而 toDF 适用于 RDD。

删除collect,然后再添加一个map 以将您的numpy 数组转换为Vectors.dense 应该可以完成这项工作。

以下是您提供的数据的示例:

import numpy as np
from pyspark.ml.linalg import Vectors

# your data as an RDD (i.e. before 'collect')
dd = sc.parallelize([(2.0, np.array([ 2.09078012])), (2.0, np.array([ 2.09078012])), (2.0, np.array([ 2.09078012])), (1.0, np.array([ 2.09078012])), (2.0, np.array([ 2.09078012])), (1.0, np.array([ 2.09078012]))])
dd.take(1)
# [(2.0, array([ 2.09078012]))]

df = dd.map(lambda x: (x[0], Vectors.dense(x[1]))).toDF()
df.show()
# +---+------------+ 
# | _1|          _2|
# +---+------------+
# |2.0|[2.09078012]| 
# |2.0|[2.09078012]|
# |2.0|[2.09078012]|
# |1.0|[2.09078012]|
# |2.0|[2.09078012]|
# |1.0|[2.09078012]|
# +---+------------+

要为结果列命名,请将它们作为列表参数包含在toDF 中,即toDF(["column_1", "column_2"])

【讨论】:

我的意图是在.toDfList(不在 Rdd 上)。因为它只会在 scala 中出现。无论如何感谢您的指出。

以上是关于将列表转换为 pyspark 数据框的主要内容,如果未能解决你的问题,请参考以下文章

将列表转换为 pyspark 数据框

将列表转换为数据框,然后在 pyspark 中加入不同的数据框

将列表转换为pyspark中的数据框列

将 Pyspark 数据框转换为具有实际值的列表

如何将 json 对象列表转换为单个 pyspark 数据框?

将标准 python 键值字典列表转换为 pyspark 数据框