如何将列拆分为 pyspark 中的标签和功能?
How to split columns into label and features in pyspark?
我正在研究 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")
......
从这里可以看出这是一个非常小的数据集,所有的特征都放在一起,有一个共同的名字:features。
但通常我们从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 格式转换为上述格式,以便我可以继续工作?或者,有没有其他不需要这样做的?
谢谢
VectorAssembler
可用于将给定的列列表转换为单个向量列。
用法示例:
assembler = VectorAssembler(
inputCols=["c1", "c2", "c3", "c4"],
outputCol="features")
output = assembler.transform(df)
这要求使用的所有列都是数字、布尔或向量类型。如果您有字符串列,则有必要使用额外的转换器:StringIndexer
. For an overview of all avaiable transformers, see the documentation。
请注意,在同一数据上连续使用多个变换器时,使用 Pipeline 更简单。
我正在研究 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")
......
从这里可以看出这是一个非常小的数据集,所有的特征都放在一起,有一个共同的名字:features。
但通常我们从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 格式转换为上述格式,以便我可以继续工作?或者,有没有其他不需要这样做的?
谢谢
VectorAssembler
可用于将给定的列列表转换为单个向量列。
用法示例:
assembler = VectorAssembler(
inputCols=["c1", "c2", "c3", "c4"],
outputCol="features")
output = assembler.transform(df)
这要求使用的所有列都是数字、布尔或向量类型。如果您有字符串列,则有必要使用额外的转换器:StringIndexer
. For an overview of all avaiable transformers, see the documentation。
请注意,在同一数据上连续使用多个变换器时,使用 Pipeline 更简单。