AnalysisException генерируется, когда DataFrame пуст (такого структурного поля нет) - PullRequest
0 голосов
/ 29 марта 2019

У меня есть фрейм данных, к которому я применяю фильтр, а затем серию преобразований.В конце я выбираю несколько столбцов.

//  Filters the event related to a user_principal.
  var filteredCount = events.filter("Properties.EventTypeName == 'user_principal_created' or Properties.EventTypeName == 'user_principal_updated'");
                            // Selects the columns based on the event type.
                            .withColumn("Username", when(col("Properties.EventTypeName") === lit("user_principal_created"), col("Body.Username"))
                            .otherwise(col("Body.NewValue.Username")))
                            .withColumn("FirstName", when(col("Properties.EventTypeName") === lit("user_principal_created"), col("Body.FirstName"))
                            .otherwise(col("Body.NewValue.FirstName")))
                            .withColumn("LastName", when(col("Properties.EventTypeName") === lit("user_principal_created"), col("Body.LastName"))
                            .otherwise(col("Body.NewValue.LastName")))
                            .withColumn("PrincipalId", when(col("Properties.EventTypeName") === lit("user_principal_created"), col("Body.PrincipalId"))
                            .otherwise(col("Body.NewValue.PrincipalId")))
                            .withColumn("TenantId", when(col("Properties.EventTypeName") === lit("user_principal_created"), col("Body.TenantId"))
                            .otherwise(col("Body.NewValue.TenantId")))
                            .withColumnRenamed("Timestamp", "LastChangeTimestamp")
                            // Create the custom primary key.
                            .withColumn("PrincipalUserId", substring(concat(col("TenantId"), lit("-"), col("PrincipalId")), 0, 128))                           
                            // Select the rows.
                            .select("PrincipalUserId", "TenantId", "PrincipalId", "FirstName", "LastName", "Username", "LastChangeTimestamp")

Работает, только если в events есть строки, которые соответствуют фильтру.Если ни одна строка не соответствует фильтру, я получаю следующее исключение:

org.apache.spark.sql.AnalysisException: Нет такого поля структуры Имя пользователя в ...

Вопрос

Что я могу сделать, чтобы справиться с таким сценарием и предотвратить сбой withColumn?

Обновление

Вот логический план, когда он работает:

== Анализируемый логический план == Тело: структура, CitationNumber: строка, Цвет: строка, CommitReference: строка, ContactAddress: структура, ControlId: строка,Данные: строка зависимости: массив>, Описание: строка, DeviceId: строка, ошибка: BIGINT, ErrorDetails: строка, освобождение: структура, ExternalId: строка, FeatureId: строка Особенности: массив, FirstName: строка, GroupPrincipals: массив, GroupType: bigint, Id: bigint, IsAuthorized: логическое значение, IsDedicatedStorage: логическое значение, IsEnabled: логическое значение, IsInitialCreation: логическое значение, ... еще 33 поля>, Id: строка, свойства: struct, Метка времени: строка Отношение [Тело # 248, Id #249, свойства № 250, отметка времени № 251] json

И когда выдается исключение:

== Анализируемый логический план == Тело: структура, Id: bigint, IsAuthorized: логическое значение, Широта: двойное, Долгота: двойное, Имя: строка,NewValue: структура, OldValue: структура, Порядковый: BIGINT, ParentZoneId: строка, PrincipalId: BIGINT, PrincipalName: строка, Требования: массив, FeatureId: строка, RequirementId: строка, ServiceId: строка >>, FeatureId: строка, RequirementId: строка,ServiceId: строка >>, RestrictedZoneId: bigint, StreetName: строка, TenantId: строка, метка времени: строка, ... еще 2 поля>, Id: строка, свойства: структура, метка времени: строка Соотношение [Body # 44, Id # 45, Свойства # 46, метка времени # 47] json

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...