Apache Zeppelin Python UDF 转换为 SQL
Apache Zeppelin Python UDF into SQL
我正在尝试获取我在 python 中编写的函数,以将新列添加到 SQL table 中。我不知道如何将 UDF 从该函数传递到 SQL table。我相信这样做的方法是 withColumn,我只是不知道该怎么做。
目标是从 SQL table 中获取 day/week/year 并根据给定数据计算月份。如果我将 day/week/year 设置为 values.
,则下面的函数有效
函数如下:
def getmonth(day,week,year):
x = datetime.strptime('{}_{}_{}{}'.format(day,week,year,-0), '%d_%W_%Y%w')
month = x.strftime('%m')
udf(getmonth)
SQL...
DriveConfig = sqlContext.sql("""
SELECT
daymade as day,
weekmade as week,
yearmade as year
FROM datatable2 """)
这是我的 table 大致的样子,我想添加周和年之间的月份列
day week year
2 42 2017
3 2 2011
1 14 2005
...
类似的东西。我更改了列名,因为应避免使用保留字,因为它们会引起混淆并且更难使用。
DECLARE @Something TABLE
(
MyDay INT
, MyWeek INT
, MyYear INT
)
INSERT @Something
(
MyDay,
MyWeek,
MyYear
)
VALUES
(2, 42, 2017)
,(3, 2, 2011)
, (1, 14, 2005)
SELECT DATEADD(day, MyDay, DATEADD(WEEK, MyWeek, CONVERT(CHAR(4), MyYear) + '0101'))
FROM @Something
def getmonth(day,week,year):
x = datetime.strptime('{}_{}_{}{}'.format(day,week,year,-0), '%d_%W_%Y%w')
month = x.strftime('%m')
return udf(month)
month = udf(getmonth, IntegerType())
DriveConfig = DriveConfig.withColumn("month", month(DriveConfig.day, DriveConfig.week, DriveConfig.year))
我正在尝试获取我在 python 中编写的函数,以将新列添加到 SQL table 中。我不知道如何将 UDF 从该函数传递到 SQL table。我相信这样做的方法是 withColumn,我只是不知道该怎么做。
目标是从 SQL table 中获取 day/week/year 并根据给定数据计算月份。如果我将 day/week/year 设置为 values.
,则下面的函数有效函数如下:
def getmonth(day,week,year):
x = datetime.strptime('{}_{}_{}{}'.format(day,week,year,-0), '%d_%W_%Y%w')
month = x.strftime('%m')
udf(getmonth)
SQL...
DriveConfig = sqlContext.sql("""
SELECT
daymade as day,
weekmade as week,
yearmade as year
FROM datatable2 """)
这是我的 table 大致的样子,我想添加周和年之间的月份列
day week year
2 42 2017
3 2 2011
1 14 2005
...
类似的东西。我更改了列名,因为应避免使用保留字,因为它们会引起混淆并且更难使用。
DECLARE @Something TABLE
(
MyDay INT
, MyWeek INT
, MyYear INT
)
INSERT @Something
(
MyDay,
MyWeek,
MyYear
)
VALUES
(2, 42, 2017)
,(3, 2, 2011)
, (1, 14, 2005)
SELECT DATEADD(day, MyDay, DATEADD(WEEK, MyWeek, CONVERT(CHAR(4), MyYear) + '0101'))
FROM @Something
def getmonth(day,week,year):
x = datetime.strptime('{}_{}_{}{}'.format(day,week,year,-0), '%d_%W_%Y%w')
month = x.strftime('%m')
return udf(month)
month = udf(getmonth, IntegerType())
DriveConfig = DriveConfig.withColumn("month", month(DriveConfig.day, DriveConfig.week, DriveConfig.year))