PySpark - 从Numpy Matrix创建DataFrame

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PySpark - 从Numpy Matrix创建DataFrame相关的知识,希望对你有一定的参考价值。

我有一个numpy矩阵:

arr = np.array([[2,3], [2,8], [2,3],[4,5]])

我需要从arr创建一个PySpark Dataframe。我无法手动输入值,因为arr的长度/值将动态变化,因此我需要将arr转换为数据帧。

我尝试了以下代码,但没有成功。

df= sqlContext.createDataFrame(arr,["A", "B"])

但是,我收到以下错误。

TypeError: Can not infer schema for type: <type 'numpy.ndarray'>
答案

希望这可以帮助!

import numpy as np

#sample data
arr = np.array([[2,3], [2,8], [2,3],[4,5]])

rdd1 = sc.parallelize(arr)
rdd2 = rdd1.map(lambda x: [int(i) for i in x])
df = rdd2.toDF(["A", "B"])
df.show()

输出是:

+---+---+
|  A|  B|
+---+---+
|  2|  3|
|  2|  8|
|  2|  3|
|  4|  5|
+---+---+
另一答案
import numpy as np
from pyspark.ml.linalg import Vectors
arr = np.array([[2,3], [2,8], [2,3],[4,5]])
df = np.concatenate(arr).reshape(1000,-1)
dff = map(lambda x: (int(x[0]), Vectors.dense(x[1:])), df)
mydf = spark.createDataFrame(dff,schema=["label", "features"])
mydf.show(5)

试试这个会工作..

以上是关于PySpark - 从Numpy Matrix创建DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

删除在 pyspark 中使用 numpy.savetxt 创建的 csv 文件

从 Pyspark Dataframe 中提取 numpy 数组

直接将 Pandas 数据帧转换为稀疏 Numpy 矩阵

pyspark:ImportError:没有名为 numpy 的模块

Pyspark - 尝试迭代 numpy 数组时出错

Python与线性代数——Numpy中的matrix()和array()的区别