Как получить значения из столбца dataframe, используя SparkSQL? - PullRequest
0 голосов
/ 05 февраля 2019

Сейчас я работаю со Spark / Scala и пытаюсь объединить несколько фреймов данных, чтобы получить ожидаемый результат.Ввод данных - это файлы CSV с информацией о записи вызовов.Это основные поля ввода.

a_number: String = - это номер вызова источника.

area_code_a: String = - это код области a_number.

prefix_a: String = isпрефикс a_number.

b_number: String = является номером вызова получателя.

area_code_b: String = является кодом зоны b_number.

prefix_b: String = является префиксом b_number.

reason_value: String = - это конечный статус вызова.

val dfint = ((cdrs_nac.join(grupos_nac).where(col("causevalue") === col("id")))
    .join(centrales_nac, col("dpc") === col("pointcode_decimal"), "left")
    .join(series_nac_a).where(col("area_code_a") === col("codigo_area") && 
        col("prefix_a") === col("prefijo") && 
        col("series_a") >= col("serie_inicial") && 
        col("series_a") <= col("serie_final"))
    .join(series_nac_b, (
        ((col("codigo_area_b") === col("area_code_b")) && col("len_b_number") == "8") || 
        ((col("codigo_area_b") === col("area_code_b")) && col("len_b_number") == "10") || 
        ((col("codigo_area_b") === col("codigo_area_cent")) && col("len_b_number") == "7")) && 
        col("prefix_b") === col("prefijo_b") && 
        col("series_b") >= col("serie_inicial_b") && 
        col("series_b") <= col("serie_final_b"), "left")

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

Я проводил несколько тестов. Я уже обнаружил, что по какой-то причине выражение "col (" len_b_number ")" возвращает имя столбца "len_b_number" вместо значений длины, равных 7, 8 или 10. Это означает, что условия col ("len_b_number") == 7 ИЛИ col ("len_b_number") == 8 ИЛИ col ("len_b_number") == 10 условий никогда не будутработать, потому что код всегда будетсравните с именем столбца.

В данный момент выходные данные пустые, потому что col ("len_b_number") не совпадает с 7, 8 или 10. Я хотел бы знать, может ли ypou помочь понять, как извлечьзначение из этого столбца.

Спасибо

1 Ответ

0 голосов
/ 06 февраля 2019

Попробуйте использовать === вместо ==.

Я не могу получить вашу ошибку.

&& col("len_b_number") == "8" 

должно быть:

&& col("len_b_number") === "8" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...