PySpark заполнить отсутствующее / неправильное значение сгруппированным средним

Прежде всего, если вы используете метод .Configure, вы не будете вводить MyConfigPath, но IOptions (посмотрите еще на свою первую ссылку). Таким образом, ваша инъекция становится примерно такой:

public MyClass(IOptions myConfigPathOptions)

Во-вторых, configuration.GetSection предназначен для доступа к целому разделу, а не только к строке. Если вы хотите напрямую получить доступ к «MyConfigPath» из JSON, вы можете использовать configuration["AppSettings:MyConfigPath"]. Вы можете использовать GetSection как configuration.GetSection("AppSettings"), чтобы получить все настройки приложения в целом.

Предлагаю вам ознакомиться с документацией для IConfiguration и IOptions

Я предполагаю, что вы действительно пытаетесь сделать что-то например:

У вас есть класс для всех ваших настроек:

public class MyAppSettings {
    public string MyConfigPath {get; set;} 
    public int MyOtherSetting { get; set; } // sample of how you could have more
}

Json для вышеупомянутого с добавленным «MyOtherSetting» будет выглядеть примерно так:

{
    "AppSettings": {
        "MyConfigPath": "C:\\EmployeeUpload",
        "MyOtherSetting" : 501
    }
}

В вашем классе запуска вы можете использовать это:

services.Configure(configuration.GetSection("AppSettings")

Теперь для инъекций вам нужно будет использовать что-то вроде этого:

MyClass(IOptions settingOptions)
{            
    _myConfigPath = myConfigPath.Value.MyConfigPath;
}

1
задан Jason 19 January 2019 в 21:22
поделиться

1 ответ

Примечание: Когда мы создаем группу, строки, имеющие Null, игнорируются. Если у нас есть 3 строки, одна из которых имеет значение Null, то среднее значение делится на 2, а не на 3, потому что третье значение было Null. Ключевым моментом здесь является использование функции Window () .

from pyspark.sql.functions import avg, col, when
from pyspark.sql.window import Window
w = Window().partitionBy('fruit')

#Replace negative values of 'qty' with Null, as we don't want to consider them while averaging.
df = df.withColumn('qty',when(col('qty')<0,None).otherwise(col('qty')))
df = df.withColumn('qty',when(col('qty').isNull(),avg(col('qty')).over(w)).otherwise(col('qty')))
df.show()
+-----+---+---+
|fruit| id|qty|
+-----+---+---+
| Pear| 04|6.0|
| Pear| 05|2.0|
|Mango| 06|6.0|
|Mango| 07|4.0|
|Mango| 08|2.0|
|Apple| 01|5.0|
|Apple| 02|1.0|
|Apple| 03|3.0|
+-----+---+---+
0
ответ дан cph_sto 19 January 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: