在pyspark cloudera中定义函数
define function in pyspark cloudera
我定义了从列表中读取不同表的小函数
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 中执行相同的操作时,出现以下错误消息,我无法弄清楚。有人可以帮帮我吗?
还共享图像,其中我 运行 在我的本地系统中具有相同的功能:
运行良好,请看下图:
我得到了答案:这是因为版本 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)
我定义了从列表中读取不同表的小函数
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 中执行相同的操作时,出现以下错误消息,我无法弄清楚。有人可以帮帮我吗?
还共享图像,其中我 运行 在我的本地系统中具有相同的功能:
运行良好,请看下图:
我得到了答案:这是因为版本 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)