亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PySpark SQL 覆蓋返回空表

PySpark SQL 覆蓋返回空表

慕森王 2023-03-30 09:34:07
我正在遷移表中的一些數據,我正在嘗試更改“日期”列的值,但 PySpark 似乎在讀取數據時刪除了數據。我正在執行以下步驟:從表中讀取數據更改列的值將數據覆蓋到同一張表當我在這些步驟之后檢查數據時,我的表是空的。這是我的代碼table = "MY_TABLE" data_input = sqlContext.read.format("jdbc").options(url=JDBCURL, dbtable=table).load()print("data_input.count()=", data_input.count())print("'2019' in data_input:", data_input.where(col("date").contains("2019")).count())print("'YEAR' in data_input:", data_input.where(col("date").contains("YEAR")).count())# data_input.count()= 1000# '2019' in data_input: 1000# 'YEAR' in data_input: 0data_output = data_input.withColumn("date", F.regexp_replace("date", "2019", "YEAR"))print("data_output.count()=", data_output.count())print("'2019' in data_output:", data_output.where(col("date").contains("2019")).count())print("'YEAR' in data_output:", data_output.where(col("date").contains("YEAR")).count())# data_output.count()= 1000# '2019' in data_output: 1000# 'YEAR' in data_output: 0到目前為止一切順利,讓我們覆蓋表格df_writer = DataFrameWriter(data_output)df_writer.jdbc(url = JDBCURL, table=table, mode="overwrite")# Let's check the data nowprint("data_input.count()=", data_input.count())print("'2019' in data_input:", data_input.where(col("date").contains("2019")).count())print("'YEAR' in data_input:", data_input.where(col("date").contains("YEAR")).count())# data_input.count()= 0# '2019' in data_input: 0# 'YEAR' in data_input: 0# huh, weirdprint("data_output.count()=", data_output.count())print("'2019' in data_output:", data_output.where(col("date").contains("2019")).count())print("'YEAR' in data_output:", data_output.where(col("date").contains("YEAR")).count())# data_output.count()= 0# '2019' in data_output: 0# 'YEAR' in data_output: 0# Still weird查詢SELECT * FROM MY_TABLE返回 0 行。為什么 [Py]Spark 這樣做?我怎樣才能改變這種行為?緩存?這在文檔中有什么解釋?
查看完整描述

2 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

我只是遇到了同樣的問題并.cache()在閱讀表格后添加為我修復了它,正如那里所解釋的那樣:

data_input = sqlContext.read.format("jdbc").options(url=JDBCURL, dbtable=table).cache()


data_output = [ do something with data_input ]


data_output.write.jdbc(url = JDBCURL, table=table, mode="overwrite")


查看完整回答
反對 回復 2023-03-30
?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

我通過“緩存”數據框找到了解決方法:


data_pandas = data_output.toPandas()

data_spark = spark.createDataFrame(data_pandas)

data_spark.write.jdbc(url=JDBCURL, table=table, mode="overwrite")


查看完整回答
反對 回復 2023-03-30
  • 2 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號