向pyspark Dataframe添加新行

Rou*_*han 2 python apache-spark pyspark

是一个非常新的pyspark,但对熊猫很熟悉。我有一个pyspark数据框

# instantiate Spark
spark = SparkSession.builder.getOrCreate()

# make some test data
columns = ['id', 'dogs', 'cats']
vals = [
     (1, 2, 0),
     (2, 0, 1)
]

# create DataFrame
df = spark.createDataFrame(vals, columns)
Run Code Online (Sandbox Code Playgroud)

想要添加新的行(4,5,7),以便输出:

df.show()
+---+----+----+
| id|dogs|cats|
+---+----+----+
|  1|   2|   0|
|  2|   0|   1|
|  4|   5|   7|
+---+----+----+
Run Code Online (Sandbox Code Playgroud)

bha*_*edi 8

要将行附加到数据帧,也可以使用收集方法。collect() 函数将数据帧转换为列表,您可以直接将数据追加到列表中,然后再次将列表转换为数据帧。

我的 Spark 数据框叫做df就像

+---+----+------+
| id|name|gender|
+---+----+------+
|  1|   A|     M|
|  2|   B|     F|
|  3|   C|     M|
+---+----+------+
Run Code Online (Sandbox Code Playgroud)

使用收集将此数据框转换为列表

collect_df = df.collect()
print(collect_df)

[Row(id=1, name='A', gender='M'),
 Row(id=2, name='B', gender='F'),
 Row(id=3, name='C', gender='M')]
Run Code Online (Sandbox Code Playgroud)

将新行追加到此列表中

collect_df.append({"id" : 5, "name" : "E", "gender" : "F"})
print(collect_df)

[Row(id=1, name='A', gender='M'),
 Row(id=2, name='B', gender='F'),
 Row(id=3, name='C', gender='M'),
 {'id': 5, 'name': 'E', 'gender': 'F'}]
Run Code Online (Sandbox Code Playgroud)

将此列表转换为数据框

added_row_df = spark.createDataFrame(collect_df)
added_row_df.show()

+---+----+------+
| id|name|gender|
+---+----+------+
|  1|   A|     M|
|  2|   B|     F|
|  3|   C|     M|
|  5|   E|     F|
+---+----+------+
Run Code Online (Sandbox Code Playgroud)


cro*_*oik 7

正如bluephantom已经说过的那样,工会是要走的路。我只是在回答您的问题,以举一个pyspark示例:

columns = ['id', 'dogs', 'cats']
vals = [(1, 2, 0), (2, 0, 1)]

df = spark.createDataFrame(vals, columns)

newRow = spark.createDataFrame([(4,5,7)], columns)
appended = df.union(newRow)
appended.show()
Run Code Online (Sandbox Code Playgroud)

也请查看databricks常见问题解答:https://kb.databricks.com/data/append-a-row-to-rdd-or-dataframe.html