如何在pyspark中将列拆分为标签和功能?

问题描述 投票:1回答:1

我正在研究PySpark。来自https://spark.apache.org/docs/2.2.0/ml-pipeline.html,有一个例子:

from pyspark.ml.linalg import Vectors
from pyspark.ml.classification import LogisticRegression

# Prepare training data from a list of (label, features) tuples.
training = spark.createDataFrame([
    (1.0, Vectors.dense([0.0, 1.1, 0.1])),
    (0.0, Vectors.dense([2.0, 1.0, -1.0])),
    (0.0, Vectors.dense([2.0, 1.3, 1.0])),
    (1.0, Vectors.dense([0.0, 1.2, -0.5]))], ["label", "features"])

# Create a LogisticRegression instance. This instance is an Estimator.
lr = LogisticRegression(maxIter=10, regParam=0.01)
# Print out the parameters, documentation, and any default values.
print("LogisticRegression parameters:\n" + lr.explainParams() + "\n")
......

从这里,您可以看到这是一个非常小的数据集,并且所有功能都放在一起并具有通用名称:功能。

但通常我们从csv文件中读取数据如下:

from pyspark.ml.linalg import Vectors
from pyspark.ml.classification import LogisticRegression

spark=SparkSession.builder.getOrCreate()
df = spark.read.csv("/home/feng/Downloads/datatry.csv",header=True)

如果我的数据有5列:c1,c2,c3,c4,c5。假设c5是标签列,其他4列是功能。那么,如何将csv格式转换为上述格式,以便我可以继续工作?或者,还有另一个不需要这样做吗?

谢谢

python csv apache-spark pyspark apache-spark-ml
1个回答
1
投票

VectorAssembler可用于将给定的列列表转换为单个矢量列。

用法示例:

assembler = VectorAssembler(
    inputCols=["c1", "c2", "c3", "c4"],
    outputCol="features")

output = assembler.transform(df)

这要求所有列都是数字,布尔或矢量类型。如果你有字符串列,则需要使用额外的变换器:StringIndexer。有关所有可用变压器的概述,请参阅documentation

请注意,在相同数据上连续使用多个变换器时,使用qazxsw poi更简单。

© www.soinside.com 2019 - 2024. All rights reserved.