Ошибка с PySpark randomsplit с учетом допустимого ввода - PullRequest
0 голосов
/ 29 мая 2020

коллег по анализу данных и разработчиков. У меня проблемы с использованием функции randomsplit. Я могу распечатать фрейм входных данных, и он не выглядит неправильным. Однако когда я применяю к такой дейтаграмме функцию randomplit, я получаю непонятную ошибку. Я заметил, что если мой столбец функций (от Vectorasembly) состоит только из горячих кодировщиков, код работает нормально. Однако, когда Vectorassembly состоит как из числовых столбцов, так и из горячих кодировщиков, функция randomsplit не будет работать. Спасибо, что прочитали это!

Here is a portion of the code I am referring to 
#IT DOES NOT WORK WHEN I HAVE A COMBINATION OF DOUBLE/INTEGER TYPE WITH THE ONE HOT ENCODER TYPE!!
#feature_columns = ['tenure','MonthlyCharges','TotalCharges']+['onehot_' + c for c in categorical_columns]
feature_columns = ['onehot_' + c for c in categorical_columns] 


# Full code
from pyspark import SparkContext
from pyspark.sql.functions import col
sc = SparkContext(master = 'local')

from pyspark.sql import SparkSession
spark = SparkSession.builder \
          .appName("Python Spark SQL basic example") \
          .config("spark.some.config.option", "some-value") \
          .getOrCreate()

cuse = spark.read.csv("data/datasets_13996_18858_WA_Fn-UseC_-Telco-Customer-Churn.csv", header=True, inferSchema=True)
cuse=cuse.withColumn('TotalCharges', col('TotalCharges').cast('double'))

from pyspark.ml.feature import StringIndexer, OneHotEncoder, VectorAssembler
from pyspark.ml import Pipeline

# categorical columns
categorical_columns = cuse.columns[1:-3]
print(categorical_columns)
categorical_columns.remove('tenure')
print(categorical_columns)

stringindexer_stages = [StringIndexer(inputCol=c, outputCol='strindexed_' + c) for c in categorical_columns]
# encode label column and add it to stringindexer_stages
stringindexer_stages += [StringIndexer(inputCol='Churn', outputCol='label')]

onehotencoder_stages = [OneHotEncoder(inputCol='strindexed_' + c, outputCol='onehot_' + c) for c in categorical_columns]

# IT DOES NOT WORK WHEN I HAVE A COMBINATION OF DOUBLE/INTEGER TYPE WITH THE ONE HOT ENCODER TYPE!!
<div>
#feature_columns = ['tenure','MonthlyCharges','TotalCharges']+['onehot_' + c for c in categorical_columns]
</div>
feature_columns = ['onehot_' + c for c in categorical_columns]
vectorassembler_stage = VectorAssembler(inputCols=feature_columns, outputCol='features')

all_stages = stringindexer_stages + onehotencoder_stages + [vectorassembler_stage]
pipeline = Pipeline(stages=all_stages)
pipeline_model = pipeline.fit(cuse)

final_columns = ['features', 'label']
cuse_df = pipeline_model.transform(cuse).\
            select(final_columns)

cuse_df.limit(3).toPandas()
training, test = cuse_df.randomSplit([0.8, 0.2], seed=1234)
training.limit(3).toPandas()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...