Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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
应用StringIndexer PySpark数据帧,但按字母顺序排列_Pyspark - Fatal编程技术网

应用StringIndexer PySpark数据帧,但按字母顺序排列

应用StringIndexer PySpark数据帧,但按字母顺序排列,pyspark,Pyspark,如何在pyspark中应用索引器,但按字母顺序排列类别 在应用Stringindexer之后,我有了索引值的字典,但我想以不同的顺序排列它 index_df = StringIndexer(inputCol="gender", outputCol="genderIndex") meta = [f.metadata for f in index_df.schema.fields if f.name == "genderIndex"] meta [{u'ml_attr': {u'name': u'

如何在pyspark中应用索引器,但按字母顺序排列类别

在应用Stringindexer之后,我有了索引值的字典,但我想以不同的顺序排列它

index_df = StringIndexer(inputCol="gender", outputCol="genderIndex")

meta = [f.metadata for f in index_df.schema.fields if f.name == "genderIndex"]
meta
[{u'ml_attr': {u'name': u'genderIndex',
   u'type': u'nominal',
   u'vals': [u'Male', u'Female']}}]

a=dict(enumerate(meta[0]["ml_attr"]["vals"]))
a=
{0: u'Male', 1: u'Female'}
但举个例子,我希望女性是0,如果是a,b,c


我想要a=0、b=1、c=2等等。

在spark 2.3.0中,spark的StringIndexer将获得
stringOrderType
参数(),但在中,spark 2.3.0中,spark的StringIndexer将获得
stringOrderType
参数(),但在StringIndexer中,将根据标签频率为列标签提供索引。对于您的情况,我想我们可能需要编写自定义transformer来完成这项工作。我不知道您的用例,但是如果您要将索引列保存到dictionary,而不是将其用于ML管道,那么请对该列进行排序并进行密集排序。这可能会对您有所帮助。StringIndexer根据标签频率为列标签提供索引。对于您的情况,我想我们可能需要编写自定义transformer来完成这项工作。我不知道您的用例,但是如果您要将索引列保存到dictionary,而不是将其用于ML管道,那么请对该列进行排序并进行密集排序。这可能对你有帮助。
from pyspark.sql.window import Window

df = spark.createDataFrame([(10, 'b'), (20, 'b'), (30, 'c'), 
                            (40, 'c'), (50, 'c'), (60, 'a')], ['col1', 'col2'])
col2_index = df.select('col2').distinct() \
    .withColumn('col2Index', row_number().over(Window.orderBy('col2')) - 1)
col2_index.show()

+----+---------+
|col2|col2Index|
+----+---------+
|   a|        0|
|   b|        1|
|   c|        2|
+----+---------+

df.join(col2_index, 'col2').show()

+----+----+---------+
|col2|col1|col2Index|
+----+----+---------+
|   c|  30|        2|
|   c|  40|        2|
|   c|  50|        2|
|   b|  10|        1|
|   b|  20|        1|
|   a|  60|        0|
+----+----+---------+
df.withColumn('col2Index', dense_rank().over(Window.orderBy('col2')) - 1).show()