Apache spark 将数据追加到空数据帧
我正在创建一个空的数据帧,然后尝试将另一个数据帧附加到该数据帧。事实上,我想根据即将到来的RDD数量,动态地将许多数据帧附加到最初的空数据帧 如果我将值分配给另一个数据帧(第三个数据帧),union()函数可以正常工作Apache spark 将数据追加到空数据帧,apache-spark,apache-kafka,apache-spark-sql,spark-streaming,Apache Spark,Apache Kafka,Apache Spark Sql,Spark Streaming,我正在创建一个空的数据帧,然后尝试将另一个数据帧附加到该数据帧。事实上,我想根据即将到来的RDD数量,动态地将许多数据帧附加到最初的空数据帧 如果我将值分配给另一个数据帧(第三个数据帧),union()函数可以正常工作 val df3=df1.union(df2) 但是我想继续附加到我创建的初始数据帧(空),因为我想将所有RDD存储在一个数据帧中。但是,下面的代码没有显示正确的计数。似乎它根本就没有附加 df1.union(df2) df1.count() // this shows 0 a
val df3=df1.union(df2)
但是我想继续附加到我创建的初始数据帧(空),因为我想将所有RDD存储在一个数据帧中。但是,下面的代码没有显示正确的计数。似乎它根本就没有附加
df1.union(df2)
df1.count() // this shows 0 although df2 has some data and that is shown if I assign to third datafram.
如果我执行以下操作(因为df1是val,所以会出现重新分配错误。如果我将其更改为var类型,则会出现kafka多线程不安全错误)
df1=d1.union(df2)
知道如何将所有动态创建的数据帧添加到一个初始创建的数据帧中吗?
数据帧和其他分布式数据结构是不可变的,因此对它们进行操作的方法总是返回新对象。没有附加,没有修改,也没有等价的ALTER TABLE
如果我把它改为var类型,就会得到kafka多线程不安全错误
没有实际的代码是不可能给你一个明确的答案的,但它不太可能与union
code有关
有许多已知的Spark bug是由不正确的内部实现引起的(,仅列举一些)。不确定这是否是您要查找的
# Import pyspark functions
from pyspark.sql.types import StructType, StructField, IntegerType, StringType
# Define your schema
field = [StructField("Col1",StringType(), True), StructField("Col2", IntegerType(), True)]
schema = StructType(field)
# Your empty data frame
df = spark.createDataFrame(sc.emptyRDD(), schema)
l = []
for i in range(5):
# Build and append to the list dynamically
l = l + [([str(i), i])]
# Create a temporary data frame similar to your original schema
temp_df = spark.createDataFrame(l, schema)
# Do the union with the original data frame
df = df.union(temp_df)
df.show()
通过执行联合应用的转换未保存。要保存,必须执行赋值。这就是在数据帧中保存转换的方式,我建议您查看foldLeft选项,了解所需的联合类型。Ramesh关于分配是正确的。我可能还建议不要将数据帧与不同架构进行联合。Spark do不要在这个阶段合并图式,最后你会把数据放在错误的列中。谢谢,但是现在我使用相同的模式。你能给我举一个例子吗?在这种情况下,奥默,任何数据集的转换都会创建一个新的数据框,所以如果你不通过链接来补充它,那么它不会对你有帮助。使用dataframe及其不变性功能以避免任何混淆。如@MicheleMay所述,您需要注意模式。