pyspark 克服数据集之间的架构/列不一致性

8yparm6h  于 2024-01-06  发布在  Spark
关注(0)|答案(1)|浏览(196)

我发现在我的数据集中,相同的字段/列对于某些区域具有不同的业务上下文。
我有几个市场,但让我们举个例子- GB和US。这些列中的大多数具有相同的含义,但也有对不是,如:
第一个月
SB2 for US is Power Evaluation

SB1 for GB is Power Evaluation
SB2 for GB is Strength Evaluation
和它的情况下,在整个数据集,一个国家的SB 1是电源SB 2的力量,为另一个它的逆转,等等。理想的是在PySpark中寻找建议,但虽然我将在数据库工作,SQL可能也可以。
我的银层看起来像这样
| ID|市场|CK| SB1| SB2| SBX|列X|
| --|--|--|--|--|--|--|
| 1 |美国|1US| 2 | 1 | 9 | 9 |
| 2 |美国|2美制| 2 | 2 | 9 | 9 |
| 3 |美国|3US| 1 | 1 | 9 | 9 |
| 1 |GB| 1GB| 3 | 5 | 9 | 9 |
| 2 |GB| 2GB| 4 | 4 | 9 | 9 |
| 3 |GB| 3GB| 5 | 3 | 9 | 9 |
我猜在这种情况下,预期的输出是什么(请看SB 1 SB 2列)
| ID|市场|CK| SB1| SB2| SBX|列X|
| --|--|--|--|--|--|--|
| 1 |美国|1US| 2 | 1 | 9 | 9 |
| 2 |美国|2美制| 2 | 2 | 9 | 9 |
| 3 |美国|3US| 1 | 1 | 9 | 9 |
| 1 |GB| 1GB| 5 | 3 | 9 | 9 |
| 2 |GB| 2GB| 4 | 4 | 9 | 9 |
| 3 |GB| 3GB| 3 | 5 | 9 | 9 |
每个数据集有50多列,几乎有10个市场
有什么建议吗?有什么想法吗?我想这不能在摄取级别上解决,所以原始和策划区域不是实现它的地方。我想,策划的数据集必须进行转换,并相应地填充值

k97glaaz

k97glaaz1#

你可以使用标准的SQL特性-CASE..WHEN如下:

  1. select id, market, ck,
  2. case market when 'US' then SB1
  3. when 'GB' then SB2
  4. end as SB1,
  5. case market when 'US' then SB2
  6. when 'GB' then SB1
  7. end as SB2,
  8. sbx, colx
  9. from your_table

字符串
或者,您也可以使用UNION ALL如下:

  1. select id, market, ck, sb1, sb2, sbx, colx from your_table where market = 'US'
  2. UNION ALL
  3. select id, market, ck, sb2, sb1, sbx, colx from your_table where market = 'GB'

展开查看全部

相关问题