我已經定義了從串列中讀取不同表的小函式
from pyspark.sql.functions import *
df=spark.createDataFrame([
('America/New_York','2020-02-01 10:00:00')
,('Europe/Lisbon','2020-02-01 10:00:00')
,('Europe/Madrid','2020-02-01 10:00:00')
,('Europe/London', '2020-02-01 10:00:00')
,('America/Sao_Paulo', '2020-02-01 10:00:00')
]
,["OriginTz","Time"])
df2=spark.createDataFrame([
('Africa/Nairobi', '2020-02-01 10:00:00')
,('Asia/Damascus', '2020-02-01 10:00:00')
,('Asia/Singapore', '2020-02-01 10:00:00')
,('Atlantic/Bermuda','2020-02-01 10:00:00')
,('Canada/Mountain','2020-02-01 10:00:00')
,('Pacific/Tahiti','2020-02-01 10:00:00')
]
,["OriginTz", "Time"])
df.createOrReplaceTempView("test")
df2.createOrReplaceTempView("test2")
tables = ["test", "test2"]
frames = list(range(0,2))
def hive_read_func(tables, frames):
for table, frame in zip(tables, frames):
globals()["dttf" str(frame)] = eval(f'spark.sql("select * from {table}")')
當我呼叫函式時它完美地作業 - hive_read_func(tables, frames)
但是當我在 cloudera 中執行相同操作時,我收到以下錯誤訊息,我無法弄清楚。有人可以幫幫我嗎。

還共享我在本地系統中運行相同功能的影像:
效果很好,請看下圖:

uj5u.com熱心網友回復:
我得到了答案:這是因為 f-string 版本在 python 3.6 之后可用(由@AdibP 表示)但我在 python 版本 2.6 中運行它。所以出錯了,現在我用 f-string 重寫了函式:
def hive_read_func(tables, frames):
for table, frame in zip(tables, frames):
inner_code = "select * from" " " str(table)
globals()["dttf" str(frame)] = spark.sql(inner_code)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467866.html
標籤:Python 数据框 for循环 pyspark 云时代
下一篇:這個C程式的輸出怎么是1?
