例: 最も高い給与を検索するパーティションの使用
組織にHRスタッフメンバがいます。このHRスタッフメンバは、従業員が重要と考える人生の側面と従業員の給与の関連性をモデル化するプロジェクトに従事しています。このプロジェクトは、組織のウエルネス制度の一環です。この情報を使用して、ウエルネス制度を個人に合わせてカスタマイズしようとしています。
Pythonトランスフォーメーションを使用して、自部門で最も高い給与を得ている従業員を特定できます。
以下の表に、組織が収集できるデータを示します。
DepartmentName | DepartmentID | EmployeeName | SalaryIndex | EmployeeSince |
---|
HR | 1 | Jane Smith | 500 | 2/16/2010 |
R&D | 2 | Ellioth Consar | 150 | 3/29/2018 |
Finance | 3 | Concor Valashe | 230 | 11/22/2007 |
Marketing | 4 | Manchini Voliore | 800 | 5/17/2009 |
HR | 1 | Blaze Concave | 501 | 8/25/2016 |
R&D | 2 | Janet Encarr | 890 | 1/26/2019 |
HR | 1 | Chelsea Blanch | 389 | 9/3/2018 |
R&D | 1 | Samuel Coin | 10 | 1/26/2005 |
Pythonトランスフォーメーションを使用して、自部門で最も高い給与を得ている従業員を特定するには、次のタスクを実行します。
- 手順1.Pythonトランスフォーメーションをマッピングに追加します。
- Pythonトランスフォーメーションを作成します。[詳細]タブで、動作を[アクティブ]に設定します。
- 手順2.データをPythonトランスフォーメーションに渡します。
- マッピングのアップストリームトランスフォーメーションからPythonトランスフォーメーションに次のフィールドを渡します。
- - DepartmentName
- - DepartmentID
- - EmployeeName
- - SalaryIndex
- - EmployeeSince
- 手順3.データを部門別にパーティション化します。
データを部門別にパーティション化して、各部門の最も高い給与を追跡します。データを部門別にパーティション化するには、[パーティションキー]タブで受信フィールドDepartmentIDをパーティションキーとして追加します。
- 手順4.出力フィールドを作成します。
- [出力フィールド]タブで次の出力フィールドを作成し、データをダウンストリームトランスフォーメーションに渡すようにします。
- - DepartmentName_out
- - DepartmentID_out
- - EmployeeName_out
- - SalaryIndex_out
- - EmployeeSince_out
- 手順5.マップを初期化します。
各部門IDとその部門の最も高い給与を得ている従業員を関連付けるマップ変数outputmapを宣言します。
[Pre-Partition Pythonコード]セクションで次のコードを追加します。
print("Using partitions to find the employee with the highest salary")
outputmap = {}
- 手順6.データを処理するコードを定義します。
Pythonトランスフォーメーションを通過する各入力行について、従業員の給与が処理済みの行の最高給与よりも高いかどうかを確認するコードを定義します。この従業員の給与の方が高い場合は、部門の最高給与を得ている従業員を更新します。
[メインPythonコード]セクションで次のコードを追加します。
DepartmentID_out = DepartmentID
print("Processing rows for department ID " + str(DepartmentID_out))
outputmap.setdefault(DepartmentID, None)
updateMax = False
if outputmap.get(DepartmentID, None) is None:
updateMax = True
else:
max_salary = outputmap[DepartmentID]['SalaryIndex']
if max_salary is None:
updateMax = True
if SalaryIndex > max_salary:
updateMax = True
if updateMax == True:
employee_data = {'SalaryIndex':SalaryIndex,'EmployeeName':EmployeeName,
'EmployeeSince':EmployeeSince,'DepartmentName':DepartmentName}
outputmap[DepartmentID] = employee_data
- 手順7.データを出力ファイルに書き込みます。
[Python]タブの[Post-Partition Pythonコード]セクションで、マップ変数outputmapのデータを使用し、各部門で最も高い給与を得ている従業員の行を生成します。
[Post-Partition Pythonコード]セクションで次のコードを追加します。
for x in outputmap:
DepartmentID_out = x
smap = outputmap[x]
SalaryIndex_out = smap["SalaryIndex"]
EmployeeName_out = smap["EmployeeName"]
DepartmentName_out = smap["DepartmentName"]
EmployeeSince_out = smap["EmployeeSince"]
## Generate the output row
generateRow()
- 手順8.マッピングを実行します。
- Pythonトランスフォーメーションの出力フィールドがターゲットトランスフォーメーションに直接リンクされている場合、ターゲットにはマッピング実行後に次のデータが含まれます。
DepartmentName | DepartmentID | EmployeeName | SalaryIndex | EmployeeSince |
---|
Finance | 3 | Concor Valashe | 230 | 11/22/2007 |
Marketing | 4 | Manchini Voliore | 800 | 5/17/2009 |
HR | 1 | Blaze Concave | 501 | 8/25/2016 |
R&D | 2 | Janet Encarr | 890 | 1/26/2019 |