在我的一个项目中,我需要检查输入数据框是否为空。如果它不是空的,我需要做一些操作,并将一些结果加载到一个表中,并覆盖那里的旧数据。
另一方面,如果输入数据框为空,则不做任何操作,只需要截断表中的旧数据。我知道如何用覆盖插入数据,但不知道如何截断表。我搜索了现有的问题/答案,没有找到明确的答案。
driver = 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
stage_url = 'jdbc:sqlserver://server_nameDEV:51433;databaseName=project_stage;user=xxxxx;password=xxxxxxx'
if input_df.count()>0:
# Do something here to generate result_df
print(" write to table ")
write_dbtable = 'Project_Stage.StageBase.result_table'
write_df = result_df
write_df.write.format('jdbc').option('url', stage_url).option('dbtable', write_dbtable).
option('truncate', 'true').mode('overwrite').option('driver',driver).save()
else:
print('no account to process!')
query = """TRUNCATE TABLE Project_Stage.StageBase.result_table"""
### Not sure how to run the query
截断可能是这样做的最简单的:
write_df = write_df.limit(0)
另外,为了更好的性能,您应该使用
而不是input_df.count() > 0
。Spark 3.2及以下:
len(input_df.head(1)) > 0
Spark 3.3+:
~df.isEmpty()