Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建;特色;PySpark中包含数字和分类变量的列_Python_Apache Spark_Pyspark - Fatal编程技术网

Python 创建;特色;PySpark中包含数字和分类变量的列

Python 创建;特色;PySpark中包含数字和分类变量的列,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我试图使用Python在Spark中创建一个“features”专栏,以便机器学习库使用。但是,我在生成“features”列的VectorAssembler中遇到了一些问题,包括数字变量和分类变量 到目前为止构建的管道可以创建一个只包含分类变量的“features”列,但我不知道如何扩展它,使“features”列同时包含分类变量和数字变量 请注意,我正在使用Spark 2.3和Python 3。我已经找到了一种方法,但我不确定这是否是实现我想要的最有效的方法 cat_cols = ["cat

我试图使用Python在Spark中创建一个“features”专栏,以便机器学习库使用。但是,我在生成“features”列的VectorAssembler中遇到了一些问题,包括数字变量和分类变量

到目前为止构建的管道可以创建一个只包含分类变量的“features”列,但我不知道如何扩展它,使“features”列同时包含分类变量和数字变量


请注意,我正在使用Spark 2.3和Python 3。

我已经找到了一种方法,但我不确定这是否是实现我想要的最有效的方法

cat_cols = ["cat_1", "cat_2", "cat_3"]
num_cols = ["num_1", "num_2", "num_3", "num_4"]

indexers = [StringIndexer(inputCol = c, outputCol="{0}_indexed".format(c)) for c in cat_cols]

encoders = [StringIndexer(inputCol = indexer.getOutputCol(), outputCol = "{0}_encoded".format(indexer.getOutputCol())) 
for indexer in indexers]

assemblerCat = VectorAssembler(inputCols = [encoder.getOutputCol() for encoder in encoders], outputCol = "cat")

pipelineCat = Pipeline(stages = indexers + encoders + [assemblerCat])
df = pipelineCat.fit(df).transform(df)

assemblerNum = VectorAssembler(inputCols = num_cols, outputCol = "num")

pipelineNum = Pipeline(stages = [assemblerNum])
df = pipelineNum.fit(df).transform(df)

assembler = VectorAssembler(inputCols = ["cat", "num"], outputCol = "features")

pipeline = Pipeline(stages = [assembler])
df = pipeline.fit(df).transform(df)

基本上,我为分类变量创建了一条管道,为数值变量创建了一条管道,然后将它们合并为一个“功能”列,其中包含这两个功能。

我找到了一种方法,但我不确定这是否是实现我想要的最有效的方法

cat_cols = ["cat_1", "cat_2", "cat_3"]
num_cols = ["num_1", "num_2", "num_3", "num_4"]

indexers = [StringIndexer(inputCol = c, outputCol="{0}_indexed".format(c)) for c in cat_cols]

encoders = [StringIndexer(inputCol = indexer.getOutputCol(), outputCol = "{0}_encoded".format(indexer.getOutputCol())) 
for indexer in indexers]

assemblerCat = VectorAssembler(inputCols = [encoder.getOutputCol() for encoder in encoders], outputCol = "cat")

pipelineCat = Pipeline(stages = indexers + encoders + [assemblerCat])
df = pipelineCat.fit(df).transform(df)

assemblerNum = VectorAssembler(inputCols = num_cols, outputCol = "num")

pipelineNum = Pipeline(stages = [assemblerNum])
df = pipelineNum.fit(df).transform(df)

assembler = VectorAssembler(inputCols = ["cat", "num"], outputCol = "features")

pipeline = Pipeline(stages = [assembler])
df = pipeline.fit(df).transform(df)
本质上,我为分类变量和数值变量创建了一个管道,然后我将它们合并为一个“features”列,其中包含这两个