微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Pyspark Dataframe 中的特定索引中添加一行或替换?

如何解决如何在 Pyspark Dataframe 中的特定索引中添加一行或替换?

我想将此列表 L1 添加为第一个索引中的一行,如何在 Pyspark Dataframe 中的特定索引中附加一行?

L1=['na',5.6,2.4]

data=[('fr',8.8,6.6),('nr',4.4,2.5),('cc',2.3,3.9)]
data_schema=[StructField('loc',StringType(),True),StructField('col',FloatType(),StructField('io',True)]
final=StructType(fields=data_schema)


df=spark.createDataFrame(data,schema=final)

df=df.withColumn("idx",F.row_number().over(Window.orderBy('col'))) 

>>show
+---+----+---+---+
|loc| col| io|idx|
+---+----+---+---+
| fr| 8.8|6.6|  1|
| nr| 4.4|2.5|  2|
| cc| 2.3|3.9|  3|

解决方法

您可以使用 idx != 1 过滤行,并使用 union 添加一行:

from pyspark.sql import functions as F,Window

L1 = ['na',5.6,2.4]
data = [('fr',8.8,6.6),('nr',4.4,2.5),('cc',2.3,3.9)]

df = spark.createDataFrame(data,['loc','col','io'])

df2 = df.withColumn(
    "idx",F.row_number().over(Window.orderBy('loc'))
).filter('idx != 1').union(spark.createDataFrame([L1 + [1]]))

df2.show()
+---+---+---+---+
|loc|col| io|idx|
+---+---+---+---+
| fr|8.8|6.6|  2|
| nr|4.4|2.5|  3|
| na|5.6|2.4|  1|
+---+---+---+---+

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。