#apache-spark #pyspark #apache-spark-sql
#apache-spark #pyspark #apache-spark-sql
Вопрос:
mock_data = [('TYCO', ' 1303','13'),('EMC', ' 120989 ','123'), ('VOLVO ', '102329 ','1234'),('BMW', '1301571345 ',' '),('FORD', '004','21212')]
df = spark.createDataFrame(mock_data, ['col1', 'col2','col3'])
------- ------------ -----
| col1 | col2| col3|
------- ------------ -----
| TYCO| 1303| 13|
| EMC| 120989 | 123|
|VOLVO | 102329 | 1234|
| BMW|1301571345 | |
| FORD| 004|21212|
------- ------------ -----
обрезать col2 и на основе длины (10-col2 длина) необходимо динамически добавлять нули заполнения в col3. объедините col2 и col3.
df2 = df.withColumn('length_col2', 10-length(trim(df.col2)))
------- ------------ ----- -----------
| col1| col2| col3|length_col2|
------- ------------ ----- -----------
| TYCO| 1303| 13| 6|
| EMC| 120989 | 123| 4|
|VOLVO | 102329 | 1234| 4|
| BMW|1301571345 | | 0|
| FORD| 004|21212| 7|
------- ------------ ----- -----------
ожидаемый результат
------- ---------- ----- -------------
| col1| col2 | col3|output
------- ---------- ----- -------------
| TYCO| 1303 | 13|1303000013
| EMC| 120989 | 123|1209890123
|VOLVO | 102329 | 1234|1023291234
| BMW| 1301571345 | |1301571345
| FORD| 004 |21212|0040021212
------- ---------- ----- -------------
Ответ №1:
То, что вы ищете, — это rpad
функция в pyspark.sql.functions
, как указано здесь => https://spark.apache.org/docs/2.3.0/api/sql/index.html
Смотрите решение ниже :
%pyspark
mock_data = [('TYCO', ' 1303','13'),('EMC', ' 120989 ','123'), ('VOLVO ', '102329 ','1234'),('BMW', '1301571345 ',' '),('FORD', '004','21212')]
df = spark.createDataFrame(mock_data, ['col1', 'col2','col3'])
df.createOrReplaceTempView("input_df")
spark.sql("SELECT *, concat(rpad(trim(col2),10,'0') , col3) as OUTPUT from input_df").show(20,False)
и результат
------- ------------ ----- ---------------
|col1 |col2 |col3 |OUTPUT |
------- ------------ ----- ---------------
|TYCO | 1303 |13 |130300000013 |
|EMC | 120989 |123 |1209890000123 |
|VOLVO |102329 |1234 |10232900001234 |
|BMW |1301571345 | |1301571345 |
|FORD |004 |21212|004000000021212|
------- ------------ ----- ---------------
Комментарии:
1. необходимо добавить col3 на основе столбца length_col2, затем необходимо объединить с col2