我买了两个三明治。其中一个字符串由MaterialNumber
和HierarchyNumber
(18位)以及其他近200列组成,第二个是由HierarchyNumber
和Description
组成的Map文件。我的任务是将第一个 Dataframe 中的HierarchyNumber
按照特定的数字编号(Level 1-Level 5)分为5个级别,我通过以下方式实现
df = df_material.withColumn("Level1", substring(col("HierarchyNumber"), 1, 3)) \
.withColumn("Level2", substring(col("HierarchyNumber"), 1, 6)) \
.withColumn("Level3", substring(col("HierarchyNumber"), 1, 10)) \
.withColumn("Level4", substring(col("HierarchyNumber"), 1, 14)) \
.withColumn("Level5", col("HierarchyNumber"))
现在我想做的是用第二个字符串中的适当的Description
来替换数字代码的子串,比如1级的3位代码,2级的6位代码。我一直使用RDD.collectAsMap
,但它没有列入白名单,我需要另一个使用PySpark的解决方案。有什么建议吗?
第一张table是这样的
| 材料编号|层次数|col3|..col100|
| --|--|--|--|
| 1 | 001915762470792000 |||
| 2 | 003411831611043000 |||
| 3 | 002653955128061000 |||
在我最初的转变之后
| 材料编号|层次数|L1| L2| L3| L4| L5|..col100|
| --|--|--|--|--|--|--|--|
| 1 | 001915762470792000 | 001 | 001915 | 0019157624 | 00191576247079 | 001915762470792000 ||
| 2 | 003411831611043000 | 003 | 003411 | 0034118316 | 00341183161104 | 003411831611043000 ||
| 3 | 002653955128061000 | 002 | 002653 | 0026539551 | 00265395512806 | 002653955128061000 ||
Map框架(df 2)看起来像这样
| 层次数|描述|
| --|--|
| 001 |品牌|
| 002 |子品牌|
| 001915 |实体|
| | |
以此类推。然后我想把L1-L5中的数字替换成它的描述
1条答案
按热度按时间kokeuurv1#
您可以像这样将
df2
与df
连接到每个级别: