【问题标题】:Pyspark add new record to each Row [duplicate]Pyspark向每一行添加新记录[重复]
【发布时间】: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})

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql apache-spark-dataset


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-18
        • 2021-05-20
        • 1970-01-01
        相关资源
        最近更新 更多