Я пытаюсь импортировать данные из таблицы mysql в H2oFrame, используя h2o.import_sql_select()
. Я бы хотел, чтобы NULL или пустые значения в столбцах VARCHAR в базе данных распознавались как NA при импорте в H2oFrame, но они рассматриваются как пустые строковые литералы. Однако для числовых столбцов значения NULL автоматически распознаются как NA.
Вот код, который у меня есть:
select_query = 'SELECT * FROM my_table'
train_data = h2o.import_sql_select("jdbc:mysql://localhost:3306/my_schema", select_query, "username", "password", use_temp_table=False)
train_data['my_string_column'].isna()
всегда приводит к нулям даже для NULL или пустых значений, поступающих из базы данных.
Однако, когда я выгружаю данные в CSV и импортирую их с помощью h2o.import_file('/path/to/file.csv', na_strings=[''])
, а затем делаю train_data['my_string_column'].isna()
, я вижу, что пустые значения правильно распознаются как NA из-за параметра na_strings
.
Есть ли способ указать na_strings
или какой-либо другой обходной путь для достижения ожидаемого поведения при импорте данных с использованием h2o.import_sql_select()
?
В настоящее время такая функция не реализована. Это просто потому, что в отличие от CSV, где нет разницы между пустой строкой и NULL, SQL имеет понятие NULL, поэтому такая функция не кажется необходимой.
Но вы говорите, что для строковых столбцов вы не получаете никаких значений N/A в своем кадре H2O, что звучит как ошибка, и я посмотрю на это.
Хонза, мне жаль, что возникла проблема с моим оператором SQL, и я был введен в заблуждение (приведенный мной пример был создан для иллюстрации, поскольку я не могу раскрыть свой настоящий SQL, который очень сложен). Я попробовал более простой импорт и смог подтвердить, что проблема не в H2O. Значения NULL фактически распознаются как NA. Просто при предварительном просмотре кадра H2O на консоли Python нет различий между NA и пустыми значениями для строковых столбцов. Принимая во внимание, что для числовых столбцов NA явно печатаются как «nan». Хотя в этом есть смысл.