针对主表一列 spark.sql 验证 2 列中的数据

     2023-04-15     39

关键词:

【中文标题】针对主表一列 spark.sql 验证 2 列中的数据【英文标题】:Validate data in 2 columns against master table one column spark.sql 【发布时间】:2019-08-22 09:05:32 【问题描述】:

我有 2 个表,比如 ZIPCODE 的主表,以及一个包含当前地址和永久地址的事务表。两个地址列都有 ZIPCODE。我需要根据主表验证这 2 个邮政编码。

Master Table:
+--------+--------------+-----+ 
|zip_code|territory_name|state| 
+--------+--------------+-----+ 
| 81A02| TERR NAME 02| NY| 
| 81A04| TERR NAME 04| FL| 
| 81A05| TERR NAME 05| NJ| 
| 81A06| TERR NAME 06| CA| 
| 81A07| TERR NAME 06| CA|
+--------+--------------+-----+

Transaction table:
+--------+--------------+-----+ 
|Address1_zc|Address2_zc|state| 
+--------+--------------+-----+ 
| 81A02| 81A05| NY| 
| 81A04| 81A06| FL| 
| 81A05| 90005| NJ| 
| 81A06| 90006| CA| 
| 41A06| 81A06| CA|
+--------+--------------+-----+

结果集应仅包含 ADDRESS1_ZC 和 ADDRESS2_ZC 中的有效邮政编码。

 +-----------+-----------+-----+ 
 |Address1_zc|Address2_zc|state| 
 +-----------+-----------+-----+ 
 | 81A02     | 81A05     | NY  | 
 | 81A04     | 81A06     | FL  | 
 +-----------+-----------+-----+

我在此提供数据框用于测试:

df1= sqlContext.createDataFrame([("81A01","TERR NAME 01","NJ"),("81A01","TERR NAME 01","CA"),("81A02","TERR NAME 02","NY"),("81A03","TERR NAME 03","NY"), ("81A03","TERR NAME 03","CA"), ("81A04","TERR NAME 04","FL"), ("81A05","TERR NAME 05","NJ"), ("81A06","TERR NAME 06","CA"), ("81A06","TERR NAME 06","CA")], ["zip_code","territory_name","state"])
df1.createOrReplaceTempView("df1_mast")

df1= sqlContext.createDataFrame([("81A02","81A05"),("81A04","81A06"),("81A05","90005"),("81A06","90006"),("41A06","81A06")], ["Address1_zc","Address2_zc"])
df1.createOrReplaceTempView("df1_tran")

我尝试了以下 SQL,但无法获得所需的结果。

select a.* df1_tran a join df1_mast b on a.zip_code = b.Address_zc1 or a.zip_code = b.Address_zc2 where a.zip_code is null

请帮帮我。

【问题讨论】:

我不明白你的 81A0581A06 在第三个数据帧中的 Address2_zc 中来自哪里 or换成and能用吗? Peirre Gourseaud,我已经更新了数据集,请你看看。谢谢 不,即使用 AND 替换 OR 也没有用 【参考方案1】:

Pyspark 方式:

df1 = sqlContext.createDataFrame([("81A01","TERR NAME 01","NJ"),("81A01","TERR NAME 01","CA"),("81A02","TERR NAME 02","NY"),("81A03","TERR NAME 03","NY"), ("81A03","TERR NAME 03","CA"), ("81A04","TERR NAME 04","FL"), ("81A05","TERR NAME 05","NJ"), ("81A06","TERR NAME 06","CA"), ("81A06","TERR NAME 06","CA")], ["zip_code","territory_name","state"])

df2 = sqlContext.createDataFrame([("81A02","81A05"),("81A04","81A06"),("81A05","90005"),("81A05","90006"),("41A06","81A06")], ["Address1_zc","Address2_zc"])

df3 = df2.join(df1, df2['Address1_zc'] == df1['zip_code'], 'inner')
df4 = df3.withColumnRenamed('state', 'state1').drop(*(df1.columns))
df5 = df4.join(df1, df2['Address2_zc'] == df1['zip_code'], 'inner')
df6 = df5.withColumnRenamed('state', 'state2').drop(*(df1.columns))
df4.show()

 +-----------+-----------+------+------+
 |Address1_zc|Address2_zc|state1|state2|
 +-----------+-----------+------+------+
 | 81A02     | 81A05     |NY    |NJ    |
 | 81A04     | 81A06     |FL    |CA    |
 +-----------+-----------+------+------+

SQL方式:

SELECT t.*,
       a.state AS state1, 
       b.state AS state2
FROM df2 AS t
       JOIN df1 AS a ON t.Address1_zc = a.zip_code      
       JOIN df1 AS b ON t.Address2_zc = b.zip_code

【讨论】:

谢谢,但是你能以 spark.sql JOIN 格式提供这个吗,因为我不能在我的项目中使用 python 方式。 @Yuva 我添加了 SQL 语法

调整相对于 2 列的选择以在一列中返回最大值以用于另一列中的重复条目

】调整相对于2列的选择以在一列中返回最大值以用于另一列中的重复条目【英文标题】:Conditiontheselectionwithrespectto2columnstoreturnmaxvalueinonecolumnforduplicateentriesinanothercolumn【发布时间】:2021-03-0822:00:31【问题描述】:SELECT*FROMtableWHE... 查看详情

如何从 PostgreSQL 中的 2 列中获取唯一值

...ostgreSQL【发布时间】:2020-11-0608:55:18【问题描述】:我有一列"id_a"和一列"id_b"。"id_a"是整数[]类型。"id_b"是int类型。我得想办法验证没有更多的id_a具有相同id_b的值ForExample:id_a3,4,5id_b18其他示例:ERROR:id_ 查看详情

java - 如何根据Java Servlet中的外键在一列中显示多个值?

...2021-06-2002:11:10【问题描述】:大家好,我有两个MySQL表:主表:users和辅助表:users_phones每个用户可以有多个电话号码-在第二个SQL表中user_id是指向主 查看详情

根据 Pandas 中另一列中的索引从列中获取数据

】根据Pandas中另一列中的索引从列中获取数据【英文标题】:GettingdatafromacolumnbasedonindexesinanothercolumninPandas【发布时间】:2019-03-1721:07:36【问题描述】:我有一个数据框,其中两列包含列表,第一列包含项目,第二列包含索引。... 查看详情

列中的重复值

...目。只会给你带来很多麻烦。@jarlh这是一个将数据加载到主表的临时表。您是否需要检查字符串是否包含重复值或获取仅包含非重复值的不同字符串?如果 查看详情

从另一个表中选择列中的相似值并在主表中使用另一个表值

】从另一个表中选择列中的相似值并在主表中使用另一个表值【英文标题】:Selectthesimilarvalueincolumnfromanothertableanduseanothertablevalueinmaintable【发布时间】:2019-10-0201:15:46【问题描述】:我有一张桌子,所有商店的名称如下:表1id|n... 查看详情

基于sql中另一列的一列中的最大数据

】基于sql中另一列的一列中的最大数据【英文标题】:maxdatainonecolumnbasedonanothercolumninsql【发布时间】:2015-02-2115:11:58【问题描述】:您好,我是SQL编程的新手,上周开始。我正在尝试从如下所示的表中选择用户ID和Maxdate:KeyUSERI... 查看详情

检查一列中的值是不是存在于另一列中,如果存在,则将另一列中的值复制到新列中

】检查一列中的值是不是存在于另一列中,如果存在,则将另一列中的值复制到新列中【英文标题】:Checkifavalueinacolumnexistsinanothercolumn,ifso,copyvaluefromanothercolumnintoanewcolumn检查一列中的值是否存在于另一列中,如果存在,则将另... 查看详情

如何引用列中的第一个非空字符串 - Cloudera Impala / Apache Hive / Spark SQL

】如何引用列中的第一个非空字符串-ClouderaImpala/ApacheHive/SparkSQL【英文标题】:HowtoReferenceFirstNon-nullStringinaColumn-ClouderaImpala/ApacheHive/SparkSQL【发布时间】:2016-07-0118:45:37【问题描述】:我正在使用ImpalaSQL。我目前有一个包含3列的... 查看详情

Azure 数据工厂在一列中映射 2 列

】Azure数据工厂在一列中映射2列【英文标题】:AzureDataFactorymapping2columnsinonecolumn【发布时间】:2018-12-2311:08:25【问题描述】:有人可以帮我解决连接两列(即我的文本文件中的firstname和lastname)并将这两列合并到我的AzureSQL数据... 查看详情

spark中的哈希函数

...2018-12-0514:34:34【问题描述】:我正在尝试向数据框中添加一列,其中将包含另一列的哈希。我找到了这段文档:https://spark.apache.org/docs/2.3.0/api/sql/index.html#hash并尝试了这个:importorg.apache.spark.sql.functions._valdf=spar 查看详情

从另一列中的日期减去一列中的值

】从另一列中的日期减去一列中的值【英文标题】:Subtractingvalueinonecolumnfromthedateinanothercolumn【发布时间】:2021-03-2805:21:44【问题描述】:我试过了:add_months(\'date_column\',-\'number_of_months_column\')我明白了:错误[3535]字符串转换为... 查看详情

根据另一列中的行自动填充第二列中的数据

】根据另一列中的行自动填充第二列中的数据【英文标题】:Autofilldatain2ndcolumnbasedonrowsinanothercolumn【发布时间】:2016-12-1517:15:14【问题描述】:我一直在搜索和搜索并尝试了几个想法,但还没有得到这个工作。我想我可能需要... 查看详情

Python根据第一列中的键组合两列

】Python根据第一列中的键组合两列【英文标题】:Pythoncombinetwocolumnsbasedonkeysinthefirstcolumn【发布时间】:2018-11-2802:03:01【问题描述】:假设我在一个excel文件中有两列,如下所示:11122334455613我的目标是实现两列之间的映射。如果... 查看详情

excel技巧:判断某一列中的数据是不是在另一列中

Excel中如何判断某一列中的数据是否在另一列中呢?看一下具体操作步骤吧。材料/工具Excel方法1/3在B列右边的空白列中,输入如下公式:=COUNTIF(E4:E12,F4),E4:E12代表A列中的所有数据,F4代表B列中的一个单元格。请点击输入图片描... 查看详情

在另一列中使用一列中的值

】在另一列中使用一列中的值【英文标题】:UseValuefromOneColumninAnotherColumn【发布时间】:2016-01-2803:49:54【问题描述】:在OracleBIAnswers中,我在Criteria选项卡上添加了一个包含复杂公式的列。我们将此列称为c9。我想添加另一个具... 查看详情

为一列中的值重塑数据

】为一列中的值重塑数据【英文标题】:Reshapedataforvaluesinonecolumn【发布时间】:2011-12-2623:43:07【问题描述】:我的data.frame看起来像这样ID|test|test_result1|B|102|A|93|A|114|C|75|F|5我想得到这样的东西:test|test_reult_ID1|test_result_ID2|test_resu... 查看详情

如何将多个 sql 函数包装到 Spark 中的 UDF 中?

...24【问题描述】:我正在使用Spark2.3.2。在我的Dataframe中的一列上,我依次执行了许多spark.sql.functions。如何将这一系列函数包装到用户定义函数(UDF)中以使其可重用?这是我的示例,重点关注一列“col 查看详情