大家好我想做增量数据查询。
df = spark .read.csv('csvFile', header=True) #1000 Rows
df.persist() #Assume it takes 5 min
df.registerTempTable('data_table') #or createOrReplaceTempView
result = spark.sql('select * from data_table where column1 > 10') #100 rows
df_incremental = spark.read.csv('incremental.csv') #200 Rows
df_combined = df.unionAll(df_incremental)
df_combined.persist() #It will take morethan 5 mins, I want to avoid this, because other queries might be running at this time
df_combined.registerTempTable("data_table")
result = spark.sql('select * from data_table where column1 > 10') # 105 Rows.
将csv / mysql表数据读入spark数据帧。
将数据帧保留在内存中(原因:我需要性能和我的数据集可以适合内存)
注册为临时表并运行spark sql查询。 #Till这个我的火花工作是UP和RUNNING。
第二天,我将收到一个增量数据集(在temp_mysql_table或csv文件中)。现在我想在Total set i上运行相同的查询:e persisted_prevData + recent_read_IncrementalData。我将其称为mixedDataset。 ***无法确定增量数据何时进入系统,每天可以发送30次。
直到这里我也不想让火花应用程序崩溃。它应该始终是Up。而且我需要使用相同的时间度量查询mixedDataset的性能,就好像它是持久的一样。
我的担忧:
因此,在高层次上,我需要动态查询(更快性能)数据集+ Incremnatal_data_if_any。
目前我正在通过为所有数据创建文件夹来执行此练习,并且增量文件也放在同一目录中。每隔2-3小时,我重新启动服务器,我的sparkApp开始读取该系统中存在的所有csv文件。然后在它们上运行查询。
尝试探索hive persistentTable和Spark Streaming,如果发现任何结果,将在此处更新。
请建议我采用一种方法/架构来实现这一目标。
如果对问题一无所知,请发表评论,不要低估它:)
感谢。
答案 0 :(得分:1)
尝试使用流式传输,因为会话已经运行会更快,每次在文件夹中放置内容时都会触发:
df_incremental = spark \
.readStream \
.option("sep", ",") \
.schema(input_schema) \
.csv(input_path)
df_incremental.where("column1 > 10") \
.writeStream \
.queryName("data_table") \
.format("memory") \
.start()
spark.sql("SELECT * FROM data_table).show()