无法从列表中创建数据框:pyspark

时间:2016-08-07 02:40:17

标签: python pyspark spark-dataframe

我有一个由函数生成的列表。当我在列表上执行print时:

print preds_labels

我获得:

[(0.,8.),(0.,13.),(0.,19.),(0.,19.),(0.,19.),(0.,19.),(0.,19.),(0.,20.),(0.,21.),(0.,23.)]

但是当我想用这个命令创建DataFrame时:

df = sqlContext.createDataFrame(preds_labels, ["prediction", "label"])

我收到错误消息:

  

不支持类型:输入'numpy.float64'

如果我手动创建列表,我没有问题。你有什么想法吗?

1 个答案:

答案 0 :(得分:6)

pyspark使用自己的类型系统,不幸的是它并没有很好地处理numpy。它适用于python类型。因此,您可以手动将numpy.float64转换为float,如

df = sqlContext.createDataFrame(
    [(float(tup[0]), float(tup[1]) for tup in preds_labels], 
    ["prediction", "label"]
)

注意pyspark会将它们视为pyspark.sql.types.DoubleType