scala - 在 Spark 中连接稀疏向量?

标签 scala apache-spark

假设您有两个稀疏向量。举个例子:

val vec1 = Vectors.sparse(2, List(0), List(1)) // [1, 0]
val vec2 = Vectors.sparse(2, List(1), List(1)) // [0, 1]

我想连接这两个向量,以便结果等效于:
val vec3 = Vectors.sparse(4, List(0, 2), List(1, 1)) // [1, 0, 0, 1]

Spark 有没有这样方便的方法来做到这一点?

最佳答案

如果您有 DataFrame 中的数据,然后 VectorAssembler将是正确的使用方法。例如:

from pyspark.ml.feature import VectorAssembler

dataset = spark.createDataFrame(
    [(0, Vectors.sparse(10, {0: 0.6931, 5: 0.0, 7: 0.5754, 9: 0.2877}), Vectors.sparse(10, {3: 0.2877, 4: 0.6931, 5: 0.0, 6: 0.6931, 8: 0.6931}))],
["label", "userFeatures1", "userFeatures2"])

assembler = VectorAssembler(
    inputCols=["userFeatures1", "userFeatures2"],
    outputCol="features")

output = assembler.transform(dataset)
output.select("features", "label").show(truncate=False)

为此,您将获得以下输出:
+---------------------------------------------------------------------------+-----+
|features                                                                   |label|
+---------------------------------------------------------------------------+-----+
|(20,[0,7,9,13,14,16,18],    [0.6931,0.5754,0.2877,0.2877,0.6931,0.6931,0.6931])|0|
+---------------------------------------------------------------------------+-----+

关于scala - 在 Spark 中连接稀疏向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34097926/

相关文章:

Scala 包对象与 Predef

scala - 如何将具有值的 Map 对象数组转换为单个 Map

mysql - 如何使用 Slick 在 VARCHAR 列中使用 UUID?

scala - "coalgebra"在编程上下文中是什么意思?

arrays - 从 PySpark 数组中删除 NULL 项

apache-spark - pyspark:有效地让partitionBy写入与原始表相同数量的总分区

apache-spark - 连接具有相同分区的两个 DataFrame 后,Spark DataFrame 具有哪些属性?

java - 如何在scala中使用java代理

python - 在pyspark中使用reduceByKey获取具有多个字段的值

java - 仅从 DataFrame 中的列中的时间戳中提取日期 - Java 中的 Spark