스칼라에서 테이블 이름 및 열 이름 목록을 수락하고 열 값에 추가 된 접두사를 반환합니다.
Aug 21 2020
아래 양식으로 사용자의 입력을 받고 싶습니다. 이 문자열 n
에는 table_name
및 수가 있을 수 있습니다 column_name
.
입력 구조 :
input="tablename_1:column_name|tablename_2:column_name,tablename_1:column_name|tablename_2:column_name,tablename_1:column_name|tablename_3:column_name"
실제 예 :
input="customer:name|customer_tmp:name,customer:period|account:period,customer:id|balance:balance_id"
구현하려는 논리 :
- table_name 의 경우 열 앞에
customer_tmp
접미사pm_
를 추가합니다 (예 : 이름). - table_name 의 경우 열 앞에
account
접미사acct_
를 추가합니다 (예 : 마침표). - table_name 의 경우 열 앞에
balance
접미사bal_
를 추가합니다 (예 : balance_id).
입력 예에 대한 원하는 출력 :
return_value="name|pm_name,period|acct_period,id|bal_balance_id"
이 코드를 가능한 한 일반화하려면 어떻게해야합니까?
답변
Shaido Aug 21 2020 at 10:00
한 가지 가능한 해결책은 먼저 입력 문자열을 튜플 목록으로 분할하는 것입니다.
val split_input = input.split(",")
.map(_.split("\\|").map(_.split(":")))
.map(v => (v(1)(0), v(0)(1), v(1)(1)))
foreach(println)
제공하는 인쇄 :
(customer_tmp,name,name)
(account,period,period)
(balance,id,balance_id)
다음 Map
으로 쉽게 수정할 수 있도록 원하는 로직을 a 에 유지합니다 .
val prefix_logic = Map("customer_tmp" -> "pm_", "account" -> "acct_", "balance" -> "bal_")
이제 논리를 적용하고 최종 문자열을 만들 수 있습니다.
val split_output = split_input.map(v => (v._2, prefix_logic.get(v._1).get + v._3))
val return_value = split_output.map(v => v._1 + "|" + v._2).mkString(",")
결과:
name|pm_name,period|acct_period,id|bal_balance_id