python - PySpark 以密集向量形式读入文本文件

标签 python apache-spark pyspark apache-spark-ml

我正在使用 PySpark 并尝试加载以下格式的文件,其中每一行都是一个计数向量

[1394, 56692, 0, 10, 22]
[0, 0, 0, 0, 0]
[2235, 123, 678, 0, 999]

我正在尝试使用 sc.textFile(path/to/counts.txt) 将其加载到 Spark 中。如何将文件的每一行转换为类似于以下格式的 pyspark ML 向量?我假设它是一个 lambda 函数,但不确定如何将字符串转换为 ML Vector。

from pyspark.ml.linalg import Vectors as MLVectors
data = [(MLVectors.dense([0.0, 1.0, 0.0, 7.0, 0.0]),), 
(MLVectors.dense([2.0, 0.0, 3.0, 4.0, 5.0]),), (MLVectors.dense([4.0, 0.0, 
0.0, 6.0, 7.0]),)]

最佳答案

你可以用map处理每一行

import re
from pyspark.ml.linalg import Vectors as MLVectors
rdd = sc.textFile("path/to/counts.txt")\
    .map(lambda l: MLVectors.dense([int(x) for x in (re.sub("[\[\]]", "", l).split(","))]))
rdd.take(3)

    [DenseVector([1394.0, 56692.0, 0.0, 10.0, 22.0]),
     DenseVector([0.0, 0.0, 0.0, 0.0, 0.0]),
     DenseVector([2235.0, 123.0, 678.0, 0.0, 999.0])]

数据框

import pyspark.sql.functions as psf
from pyspark.ml.feature import VectorAssembler
df = spark.read.csv("path/to/counts.txt")
df = df.select([psf.regexp_replace(c, '[\]\[]', '').cast("float").alias(c) for c in df.columns])
va = VectorAssembler(inputCols=df.columns, outputCol="vector")
df2 = va.transform(df)

关于python - PySpark 以密集向量形式读入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47022409/

相关文章:

apache-spark - TypeError : 'Column' object is not callable using WithColumn

sql - PySpark 子查询 : Accessing outer query column is not allowed

python - 看门狗观察者法

python - 有没有办法防止 VSC 中的自动格式化程序更改某些行/代码段?

python - 如何使用 Paramiko 下载昨天的文件?

python - GtkTreeviewColumn 每行具有不同的组合模型

apache-spark - Spark中的错误 "unresolved operator InsertIntoStatement LogicalRDD"是什么意思?

eclipse - 如何比较 2 列并在 Scala 中连接

apache-spark - spark SQL-Tungsten Aggregate 和 Tungsten Exchange 是什么意思?

mongodb - 如何使用来自 MongoDB 的过滤记录构建 Spark 数据框?