我试图更好地理解这两种类型,所以我创建了这两个数组,以确定我是否做得对。我现在所做的是创建两个相同的数组,我的目标是:
dv = [1.0, 0.0, 3.0]
sv = [1.0, 0.0, 3.0]所以我写了下面的语法,
from pyspark.sql import SparkSession
from pyspark.ml.linalg import Vectors
spark = SparkSession.builder.getOrCreate()
dv = Vectors.dense(1.0, 0.0, 3.0)
sv = Vectors.sparse(3, [(0,2), (1.,3.)])因此,我的第一个问题是,我的语法是否正确,以实现我的目标?
我的第二个问题是,当我打印它们时,
print(dv)
print(sv)他们返回:
[1.0,0.0,3.0]
(3,[0,1],[2.0,3.0])那么,如何显示sv的“真实”数组呢?就像在这个"Vectors.dense?表单“里?
发布于 2020-09-22 20:33:49
稀疏向量的创建略有错误。从文档:第二个和第三个参数应该是
包含索引和值的两个排序列表
这给了我们
sv = Vectors.sparse(3, [0,2], [1.,3])要将向量转换为数组,可以使用函数数组。
from pyspark.sql import functions as F
from pyspark.ml.functions import vector_to_array
spark.createDataFrame([(dv,), (sv,)], ['col1']) \
.withColumn("as_array", vector_to_array(F.col('col1'))) \
.show(truncate=False)版画
+-------------------+---------------+
|col1 |as_array |
+-------------------+---------------+
|[1.0,0.0,3.0] |[1.0, 0.0, 3.0]|
|(3,[0,2],[1.0,3.0])|[1.0, 0.0, 3.0]|
+-------------------+---------------+https://stackoverflow.com/questions/64003918
复制相似问题