如何使用SQL星火一个数据帧列中获取值?

问题描述 投票:-2回答:1

现在我与星火/斯卡拉工作,我想加入多个dataframes得到预期的输出。数据输入是CSV文件与通话记录的信息。这些输入主要领域。

a_number:字符串=为原点呼叫号码。

area_code_a:字符串=是a_number区号。

prefix_a:字符串=是a_number前缀。

b_number:字符串=是目的地呼叫号码。

区域代码B:强=是b_number区号。

prefix_b:字符串=是b_number前缀。

cause_value:字符串=是呼叫最终状态。

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字段的长度的多个输出文件。

我在做一些测试我已经发现,由于某种原因,表达“栏(” len_b_number“)”被返回列名“len_b_number”代替长度值其是7,8或10。这意味着,喂食col(“len_b_number “)== 7或山坳(” len_b_number“)== 8或山坳(” len_b_number“)== 10个条件永远不会起作用,因为代码将始终与列名比较。

这时输出为空白,因为山坳(“len_b_number”)犯规匹配7,8或10,我会想知道,如果ypou可以帮助了解如何提取此列的值。

谢谢

scala apache-spark-sql
1个回答
1
投票

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

我不能让你的错误。

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

应该:

&& col("len_b_number") === "8" 
© www.soinside.com 2019 - 2024. All rights reserved.