如何使用SparkSQL从数据框列获取值?

时间:2019-02-05 17:33:37

标签: scala apache-spark-sql

现在,我正在使用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是否可以帮助您了解如何从此列中提取值。

谢谢

1 个答案:

答案 0 :(得分:1)

尝试使用===代替==。

我听不到您的错误。

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

应为:

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