我有一个由函数生成的列表。当我在列表上执行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'
如果我手动创建列表,我没有问题。你有什么想法吗?
答案 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