Сейчас я работаю со 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 помочь понять, как извлечьзначение из этого столбца.
Спасибо