Как создать новый столбец на основе расчетов, выполненных в других столбцах в PySpark - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть следующий DataFrame:

+-----------+----------+----------+
|   some_id | one_col  | other_col|
+-----------+----------+----------+
|       xx1 |        11|       177|         
|       xx2 |      1613|      2000|    
|       xx4 |         0|     12473|      
+-----------+----------+----------+

Мне нужно добавить новый столбец, который основан на некоторых вычислениях, выполненных для первого и второго столбца, а именно, например, для col1_value = 1 и col2_value = 10 потребуется произвести процентное соотношение col1, которое включено в col2 , поэтому col3_value = (1/10) * 100 = 10%:

+-----------+----------+----------+--------------+
|   some_id | one_col  | other_col|  percentage  |
+-----------+----------+----------+--------------+
|       xx1 |        11|       177|     6.2      |  
|       xx3 |         1|       10 |      10      |     
|       xx2 |      1613|      2000|     80.6     |
|       xx4 |         0|     12473|      0       |
+-----------+----------+----------+--------------+

Я знаю, что для этого мне понадобится использовать udf, но как мне напрямую добавить новое значение столбца в зависимости от результата?

Какой-то псевдокод:

import pyspark
from pyspark.sql.functions import udf

df = load_my_df

def my_udf(val1, val2):
    return (val1/val2)*100

udf_percentage = udf(my_udf, FloatType())

df = df.withColumn('percentage', udf_percentage(# how?))

Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2018
df.withColumn('percentage', udf_percentage("one_col", "other_col"))

или

df.withColumn('percentage', udf_percentage(df["one_col"], df["other_col"]))

или

df.withColumn('percentage', udf_percentage(df.one_col, df.other_col))

или

from pyspark.sql.functions import col

df.withColumn('percentage', udf_percentage(col("one_col"), col("other_col")))

но почему бы просто:

df.withColumn('percentage', col("one_col") / col("other_col") * 100)
...