Pyspark向每一行添加新记录[重复]

Posted

技术标签:

【中文标题】Pyspark向每一行添加新记录[重复]【英文标题】:Pyspark add new record to each Row [duplicate] 【发布时间】:2020-08-18 10:10:52 【问题描述】:

我使用的是 Spark 2.3.1。我正在从 json 文件中读取数据,并且有五个 类型的记录

行(age=24,payloadId=1,salary=2900)

我想在所有五个记录中添加一个新值,新值是这样的字典格式

'age_condition':True,'salary_condition':True

所以,现在 new Row 应该是这样的

行(age=24,payloadId=1,salary=2900,Result='age_condition':True,'salary_condition':True)

【问题讨论】:

【参考方案1】:

这样怎么样?请注意,Result 列被视为字符串类型而不是字典。

import pyspark.sql.functions as f
from pyspark.sql.types import Row

row_list = [Row(age=24, payloadId=1, salary=2900)]
row_add = 'age_condition':True,'salary_condition':True

spark.createDataFrame(row_list) \
  .withColumn('Result', f.lit(str(row_add))) \
  .collect()

[Row(age=24, payloadId=1, salary=2900, Result="'age_condition': True, 'salary_condition': True")]

【讨论】:

【参考方案2】:

我不知道你为什么要通过在数据框列中添加字典来使事情复杂化,你应该添加两个新的布尔类型的列 age_conditionsalary_condition

这应该做你想做的......

from pyspark.sql.types import *

schema = StructType([StructField("dict", StructType([StructField("age_condition", BooleanType(), True), StructField("salary_condition", BooleanType(), True)]), True)])

newDf = spark.createDataFrame(['age_condition':True,'salary_condition':True], schema=schema)

df = spark.read.json("/whatever/json/path")

df.crossJoin(newDf) #no of records is same as in df as no of records in newDf is 1

【讨论】:

以上是关于Pyspark向每一行添加新记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

pyspark 中的 df.show() 问题

Pyspark 命令无法识别(Ubuntu)

将重复记录合并到 pyspark 数据框中的单个记录中

在pyspark中按行连接字符串

Pyspark - 配置 Amazon Redshift JDBC jar

Pyspark SQL拆分数据框行的记录[重复]