现在,我正在使用Spark / Scala,并且正在尝试合并多个数据框以获取预期的输出。 输入的数据是带有通话记录信息的CSV文件。这些是输入主字段。
a_number:String =是始发电话号码。
area_code_a:String =是a_number区号。
prefix_a:String =是a_number前缀。
b_number:String =是目标电话号码。
area_code_b:String =是b_number区号。
prefix_b:String =是b_number前缀。
cause_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 OR col(“ len_b_number”)== 8 OR col(“ len_b_number”)== 10个条件将永远无法工作,因为代码将始终与列名进行比较。
此刻输出为空,因为col(“ len_b_number”)与7、8或10不匹配。我想知道ypou是否可以帮助您了解如何从此列中提取值。
谢谢
答案 0 :(得分:1)
尝试使用===代替==。
我听不到您的错误。
&& col("len_b_number") == "8"
应为:
&& col("len_b_number") === "8"