Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从numpy矩阵创建Spark数据帧_Numpy_Apache Spark_Pyspark_Apache Spark Sql_Apache Spark Mllib - Fatal编程技术网

从numpy矩阵创建Spark数据帧

从numpy矩阵创建Spark数据帧,numpy,apache-spark,pyspark,apache-spark-sql,apache-spark-mllib,Numpy,Apache Spark,Pyspark,Apache Spark Sql,Apache Spark Mllib,这是我第一次使用PySpark(Spark 2),我正在尝试为Logit模型创建一个玩具数据框。我成功地运行了,并希望将我自己的数据传递给它 我试过这个: %pyspark 将numpy作为np导入 从pyspark.ml.linalg导入向量,VectorUDT 从pyspark.mllib.regression导入标签点 df=np.concatenate([np.random.randint(0,2,size=(1000)),np.random.randn(1000),3*np.rando

这是我第一次使用PySpark(Spark 2),我正在尝试为Logit模型创建一个玩具数据框。我成功地运行了,并希望将我自己的数据传递给它

我试过这个:

%pyspark
将numpy作为np导入
从pyspark.ml.linalg导入向量,VectorUDT
从pyspark.mllib.regression导入标签点
df=np.concatenate([np.random.randint(0,2,size=(1000)),np.random.randn(1000),3*np.random.randn(1000)+2,6*np.random.randn(1000)-2])。重塑(1000,-1)
df=map(λx:LabeledPoint(x[0],Vectors.dense(x[1:])),df)
mydf=spark.createDataFrame(df,[“标签”,“特性”])
但我无法摆脱:

TypeError:无法将类型转换为向量
我使用的是向量的ML库,输入是一个双数组,请问有什么问题?根据天气预报,应该没问题


非常感谢。

您混合了ML和MLlib的功能,它们不一定兼容。使用
spark ml时,不需要
标签点

sc.version
#u'2.1.1'
将numpy作为np导入
从pyspark.ml.linalg导入向量
df=np.concatenate([np.random.randint(0,2,size=(1000)),np.random.randn(1000),3*np.random.randn(1000)+2,6*np.random.randn(1000)-2])。重塑(1000,-1)
dff=map(λx:(int(x[0]),Vectors.dense(x[1:]),df)
mydf=spark.createDataFrame(dff,schema=[“label”,“features”])
mydf.show(5)
# +-----+-------------+ 
#|标签|特征|
# +-----+-------------+ 
# |    1|[0.0,0.0,0.0]| 
# |    0|[0.0,1.0,1.0]| 
# |    0|[0.0,1.0,0.0]| 
# |    1|[0.0,0.0,1.0]| 
# |    0|[0.0,1.0,0.0]|
# +-----+-------------+

PS:自Spark 2.0起,Spark.mllib包中基于RDD的API已进入维护模式。Spark的主要机器学习API现在是Spark.ml包中基于数据帧的API

这个问题很容易解决。您正在同时使用
ml
mllib
API。坚持一个。否则会出现此错误

这是针对
mllib
API的解决方案:

将numpy导入为np
从pyspark.mllib.linalg导入向量,VectorUDT
从pyspark.mllib.regression导入标签点
df=np.concatenate([np.random.randint(0,2,size=(1000)),np.random.randn(1000),3*np.random.randn(1000)+2,6*np.random.randn(1000)-2])。重塑(1000,-1)
df=map(λx:LabeledPoint(x[0],Vectors.dense(x[1:])),df)
mydf=spark.createDataFrame(df,[“标签”,“特性”])

对于
ml
API,实际上不再需要
LabeledPoint
。这是一个例子。我建议使用
ml
API,因为
mllib
API很快就会被弃用。

从Numpy到Pandas再到Spark:

data = np.random.rand(4,4)
df = pd.DataFrame(data, columns=list('abcd'))
spark.createDataFrame(df).show()
输出

+-------------------+-------------------+------------------+-------------------+
|                  a|                  b|                 c|                  d|
+-------------------+-------------------+------------------+-------------------+
| 0.8026427193838694|0.16867056812634307|0.2284873209015007|0.17141853164400833|
| 0.2559088794287595| 0.3896957084615589|0.3806810025185623| 0.9362280141470332|
|0.41313827425060257| 0.8087580640179158|0.5547653674054028| 0.5386190454838264|
| 0.2948395900484454| 0.4085807623354264|0.6814694724946697|0.32031773805256325|
+-------------------+-------------------+------------------+-------------------+

谢谢你的回答。我给了沙漠怪人奖,给了你更高的票数。谢谢!因为它是对我的(
mllib
)的补充。现在看不见了,但我们的答案只有2分钟的差异-酷…:)我认为清理这些事情是非常重要的,因为这就是混乱的开始。这不是OPs第一次在他们之间混淆,在某一点上,他们会问自己应该使用什么。当你第一次看到它时,它变得有点混乱:)我想你应该使用
列堆栈
而不是
串联
问题是,如果你要继续用Spark ML处理这些数据,为了将4列转换为一列,您需要一些类似“更下游”的内容,如我的回答中的
功能
,因为Spark ML需要此表单中的功能。。。