如何根据 PySpark 中其他列中的计算创建新列
How to create a new column based on calculations made in other columns in PySpark
我有以下 DataFrame:
+-----------+----------+----------+
| some_id | one_col | other_col|
+-----------+----------+----------+
| xx1 | 11| 177|
| xx2 | 1613| 2000|
| xx4 | 0| 12473|
+-----------+----------+----------+
我需要添加一个新列,它基于对第一列和第二列所做的一些计算,例如,对于 col1_value=1 和 col2_value=10 需要产生包含在 col2 中的 col1 的百分比,因此 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?))
谢谢!
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)
我有以下 DataFrame:
+-----------+----------+----------+
| some_id | one_col | other_col|
+-----------+----------+----------+
| xx1 | 11| 177|
| xx2 | 1613| 2000|
| xx4 | 0| 12473|
+-----------+----------+----------+
我需要添加一个新列,它基于对第一列和第二列所做的一些计算,例如,对于 col1_value=1 和 col2_value=10 需要产生包含在 col2 中的 col1 的百分比,因此 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?))
谢谢!
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)