【问题标题】:Iterate a spark dataframe with static list of values using withcolumn [duplicate]使用 withcolumn 迭代具有静态值列表的 spark 数据帧 [重复]
【发布时间】:2018-07-10 02:17:42
【问题描述】:

我对 pyspark 有点陌生。我有一个包含大约 5 列和 5 条记录的 spark 数据框。我有 5 条记录的列表。 现在我想使用 withColumn 将列表中的这 5 个静态记录添加到现有数据框中。我这样做了,但它不起作用。 非常感谢任何建议。

以下是我的示例:

dq_results=[] 

for a in range(0,len(dq_results)):
    dataFile_df=dataFile_df.withColumn("dq_results",lit(dq_results[a]))
    print lit(dq_results[a])

谢谢, 斯雷拉姆

【问题讨论】:

  • 感谢您的回复..但我的问题是添加一个包含自定义值列表的列。提供的链接从现有数据框中添加新列。

标签: pyspark spark-dataframe pyspark-sql


【解决方案1】:
dq_results=[] 

从列表dq_results创建一个数据框:

df_list=spark.createDataFrame(dq_results_list,schema=dq_results_col)

为 df_list id 添加一列(它将是行 id)

df_list_id = df_list.withColumn("id", monotonically_increasing_id())

为dataFile_df id添加一列(它将是行id)

dataFile_df= df_list.withColumn("id", monotonically_increasing_id())

现在我们可以同时加入数据框df_listdataFile_df

dataFile_df.join(df_list,"id").show()

所以dataFile_df 是最终的数据帧

【讨论】:

  • 希望这能解决您的问题
  • 非常感谢它的工作..
  • @sreeramch 欢迎使用 pysaprk-hadoop 让我知道任何帮助
  • 此解决方案可能不起作用,因为 monotonically_increasing_id() 随数据的分区而变化并且是不确定的。您可以使用索引进行压缩,也就是说,与建议相反,确定性。
【解决方案2】:

withColumn 将添加一个新列,但我想您可能想要追加 Rows。试试这个:

df1 = spark.createDataFrame([(a, a*2, a+3, a+4, a+5) for a in range(5)], "A B C D E".split(' '))

new_data = [[100 + i*j for i in range(5)] for j in range(5)]

df1.unionAll(spark.createDataFrame(new_data)).show()

+---+---+---+---+---+
|  A|  B|  C|  D|  E|
+---+---+---+---+---+
|  0|  0|  3|  4|  5|
|  1|  2|  4|  5|  6|
|  2|  4|  5|  6|  7|
|  3|  6|  6|  7|  8|
|  4|  8|  7|  8|  9|
|100|100|100|100|100|
|100|101|102|103|104|
|100|102|104|106|108|
|100|103|106|109|112|
|100|104|108|112|116|
+---+---+---+---+---+

【讨论】:

  • 感谢您的回复..但我需要从我拥有的列表中添加一个包含动态值的新列到数据框..
猜你喜欢
  • 2018-11-09
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多