Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Apache spark Pyspark->;StringIndexer:“;无”;值替换为数字_Apache Spark_Pyspark - Fatal编程技术网

Apache spark Pyspark->;StringIndexer:“;无”;值替换为数字

Apache spark Pyspark->;StringIndexer:“;无”;值替换为数字,apache-spark,pyspark,Apache Spark,Pyspark,我有一个数据框,它有几个“无”值。 通过StringIndexer将字符串列转换为浮点列后,“无”值将替换为数字 问题: 如何将字符串列转换为浮点列,但将“None”值保留为“None” 谢谢 # Transform nominal attributes to numeric attributes for columnName, columnType in self.rawData.dtypes: if columnType == "string": self.rawDa

我有一个数据框,它有几个“无”值。 通过StringIndexer将字符串列转换为浮点列后,“无”值将替换为数字

问题: 如何将字符串列转换为浮点列,但将“None”值保留为“None”

谢谢

# Transform nominal attributes to numeric attributes
for columnName, columnType in self.rawData.dtypes:
    if columnType == "string":
        self.rawData = PreProcess.TransformNominalToNumeric(self.rawData, columnName)



class PreProcess:
    @staticmethod
    def TransformNominalToNumeric(dataFrame, inputColumn):
        """Transformation of nominal attributes into numeric"""
        outputColumn = inputColumn + "_index"
        indexer = StringIndexer(inputCol = inputColumn, outputCol = outputColumn, handleInvalid = "keep")
        indexer = indexer.fit(dataFrame)
        dataFrame = indexer.transform(dataFrame)
        dataFrame = dataFrame.drop(inputColumn)
        dataFrame = dataFrame.withColumnRenamed(outputColumn, inputColumn)
        return dataFrame

将无效数据放在索引numLabels处的特殊附加存储桶中

您可以在变换后手动替换值

从pyspark.sql.functions导入col,当
dataFrame=spark.createDataFrame([“a”,无,“b”],“字符串”).toDF(“值”)
inputColumn=“值”
outputColumn=inputColumn+“\u索引”
索引器=字符串索引器(
inputCol=inputColumn,outputCol=outputColumn,handleInvalid=“保留”
).fit(数据帧)
(索引器)
.transform(数据帧)
.withColumn(outputColumn,当(col(outputColumn)==len(indexer.labels),无)。否则(col(outputColumn)))
.show())
# +-----+-----------+
#|价值|价值|指数|
# +-----+-----------+
#| a | 0.0|
#|空|空|
#| b | 1.0|
# +-----+-----------+
但是,如果您计划稍后使用
pyspark.ml
,那么这没有任何价值。没有
pyspark.ml
算法接受
NULL
s,因此您必须根据类型和要求进行插补、删除和编码(如此处所示),然后才能继续

将无效数据放在索引numLabels处的特殊附加存储桶中

您可以在变换后手动替换值

从pyspark.sql.functions导入col,当
dataFrame=spark.createDataFrame([“a”,无,“b”],“字符串”).toDF(“值”)
inputColumn=“值”
outputColumn=inputColumn+“\u索引”
索引器=字符串索引器(
inputCol=inputColumn,outputCol=outputColumn,handleInvalid=“保留”
).fit(数据帧)
(索引器)
.transform(数据帧)
.withColumn(outputColumn,当(col(outputColumn)==len(indexer.labels),无)。否则(col(outputColumn)))
.show())
# +-----+-----------+
#|价值|价值|指数|
# +-----+-----------+
#| a | 0.0|
#|空|空|
#| b | 1.0|
# +-----+-----------+

但是,如果您计划稍后使用
pyspark.ml
,那么这没有任何价值。没有
pyspark.ml
算法接受
NULL
s,因此您必须根据类型和要求进行插补、删除和编码(如此处所示),然后才能继续

多谢各位。它真的帮助了我。将标称属性转换为数值后,我使用插补器将“空”值替换为平均值。谢谢。它真的帮助了我。将标称属性转换为数值后,我使用插补器将“空”值替换为平均值。