Как разбить столбцы на метки и функции в pyspark? - PullRequest
0 голосов
/ 13 февраля 2019

Я изучаю 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 в вышеуказанный формат, чтобы я мог продолжать работать?Или есть другой, которому не нужно это делать?

Спасибо

1 Ответ

0 голосов
/ 13 февраля 2019

VectorAssembler можно использовать для преобразования заданного списка столбцов в один векторный столбец.

Пример использования:

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

output = assembler.transform(df)

Для этого необходимо, чтобы все используемые столбцы имели числовой, логический или векторный типы.Если у вас есть строковые столбцы, необходимо использовать дополнительный преобразователь: StringIndexer.Обзор всех доступных трансформаторов см. В документации .

Обратите внимание, что при последовательном использовании нескольких трансформеров для одних и тех же данных проще использовать Pipeline .

...