我一直在使用Azure Pyspark在Azure Event Hubs上开发概念证明,将JSON数据流传输到Azure Databricks Notebook。在我看到的示例中,我按如下所示创建了我的粗略代码,将数据从事件中心转移到将用作目标的增量表中
connectionString = "My End Point"
ehConf = {'eventhubs.connectionString' : connectionString}
df = spark \
.readStream \
.format("eventhubs") \
.options(**ehConf) \
.load()
readEventStream = df.withColumn("body", \
df["body"].cast("string")). \
withColumn("date_only", to_date(col("enqueuedTime")))
readEventStream.writeStream.format("delta") \
.outputMode("append") \
.option("checkpointLocation", "/delta/testSink/streamprocess") \
.table("testSink")
阅读了谷歌搜索之后,df和readEventStream数据帧会发生什么?它们会在保留数据时变得更大吗?还是在正常过程中将其清空?还是只是将数据转储到Delta表之前的临时存储?在写到Delta表之前,是否可以设置流的X项数量?
谢谢
答案 0 :(得分:0)
我仔细查看了pyspark.sql module
的PySpark官方文档中的代码中使用的API的描述,我认为越来越大的内存使用量是由函数table(tableName)
引起的,如图所示低于DataFrame
,而不是流 DataFrame
。
因此table
函数创建数据结构以将流数据填充到内存中。
我建议您首先使用start(path=None, format=None, outputMode=None, partitionBy=None, queryName=None, **options)
完成流写入操作,然后再次从delta lake获取表。而且似乎没有办法在写到Delta表之前设置使用PySpark流的X项。