spark 的 dataframe 对象数据中,如何指定的列若要满足某种条件,设置特定值,否则保留原始值?
推荐做法
spark sql 提供了判断条件的 when 和 otherwise 函数,以 pyspark 为例,假设 impression 列小于 40 的值都设置为 0,具体如下:
import json
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, when
spark_session = SparkSession.builder \
.appName('knowledgedict-dataframe') \
.master('local') \
.getOrCreate()
df = spark_session.createDataFrame(
schema=['id', 'impression', 'click', 'ctr', 'city', 'content'],
data=[
(1, 100, 5, 0.05, 'beijing', ['product']),
(None, 10, 3, 0.3, 'beijing', ['product', 'article']),
(3, 50, 5, 0.1, 'shanghai', ['article', 'person'])
]
)
print(df)
df.show()
df = df.withColumn('impression', when(col('impression') == 10, 0).otherwise(col('impression')))
df.show()