当前位置: 首页 > news >正文

谷歌网站怎么设置才能打开网站互联网推广的好处

谷歌网站怎么设置才能打开网站,互联网推广的好处,angular 做网站,做网站环境配置遇到的问题大纲 表值函数完整代码 在《0基础学习PyFlink——用户自定义函数之UDF》中,我们讲解了UDF。本节我们将讲解表值函数——UDTF 表值函数 我们对比下UDF和UDTF def udf(f: Union[Callable, ScalarFunction, Type] None,input_types: Union[List[DataType], DataTy…

大纲

  • 表值函数
  • 完整代码

在《0基础学习PyFlink——用户自定义函数之UDF》中,我们讲解了UDF。本节我们将讲解表值函数——UDTF
在这里插入图片描述

表值函数

我们对比下UDF和UDTF

def udf(f: Union[Callable, ScalarFunction, Type] = None,input_types: Union[List[DataType], DataType, str, List[str]] = None,result_type: Union[DataType, str] = None,deterministic: bool = None, name: str = None, func_type: str = "general",udf_type: str = None) -> Union[UserDefinedScalarFunctionWrapper, Callable]:
def udtf(f: Union[Callable, TableFunction, Type] = None,input_types: Union[List[DataType], DataType, str, List[str]] = None,result_types: Union[List[DataType], DataType, str, List[str]] = None,deterministic: bool = None,name: str = None) -> Union[UserDefinedTableFunctionWrapper, Callable]:

可以发现:

  • UDF比UDTF多了func_type和udf_type参数;
  • UDTF的返回类型比UDF的丰富,多了两个List类型:List[DataType]和List[str];

特别是最后一点,可以认为是UDF和UDTF在应用上的主要区别。
换种更容易理解的说法是:UDTF可以返回任意数量的行作为输出而不是像UDF那样返回单个值(行)。
举一个例子:

word_count_data = ["A", "B", "C", "a", "C"] 

我们希望统计上面这些字符的个数,以及小写后字符的个数。这样A的个数是1,a的个数是2(因为a算一个,A小写后又算一个)。C的个数是2,g的个数是2。
这就要求统计算法在遇到大写字母时,需要统计大小写两种字母;而遇到小写字母时,只需要统计小写字母。

    @udtf(result_types=[DataTypes.STRING()], input_types=row_type_tab_source)def rowFunc(row):if row[0].isupper():yield row[0]yield row[0].lower()else:yield row[0]

yield关键字返回的是generator生成器。Table API对rowFunc的调用最终会生成[“A”,“a”,“B”,“b”,“C”,“c”,“a”,“C”,“c”]。
和调用UDF不同的是,需要使用flat_map来调用UDTF。flat即为“打平”,可以生动的理解为将多维降为一维。

    tab_trans=tab_source.flat_map(rowFunc)tab_trans.execute().print()
+--------------------------------+
|                             f0 |
+--------------------------------+
|                              A |
|                              a |
|                              B |
|                              b |
|                              C |
|                              c |
|                              a |
|                              C |
|                              c |
+--------------------------------+
9 rows in set

由于我们没有指定经过处理的值所属的字段名称,于是会使用默认的f0作为字段名。我们可以使用alias来给它别名下。

    tab_trans_alias=tab_trans.alias('trans_word')tab_trans_alias.execute().print()
+--------------------------------+
|                     trans_word |
+--------------------------------+
|                              A |
|                              a |
|                              B |
|                              b |
|                              C |
|                              c |
|                              a |
|                              C |
|                              c |
+--------------------------------+
9 rows in set

最后我们就可以用这个新的表做字数统计计算

    tab_trans_alias.group_by(col('trans_word')) \.select(col('trans_word'), lit(1).count) \.execute_insert("WordsCountTableSink") \.wait()
+I[A, 1]
+I[a, 2]
+I[B, 1]
+I[b, 1]
+I[C, 2]
+I[c, 2]

完整代码

from pyflink.common import Configuration
from pyflink.table import (EnvironmentSettings, TableEnvironment, Schema)
from pyflink.table.types import DataTypes
from pyflink.table.table_descriptor import TableDescriptor
from pyflink.table.expressions import lit, col
from pyflink.common import Row
from pyflink.table.udf import udf,udtf,udaf,udtaf
import pandas as pd
from pyflink.table.udf import UserDefinedFunctionword_count_data = ["A", "B", "C", "a", "C"]  def word_count():config = Configuration()# write all the data to one fileconfig.set_string('parallelism.default', '1')env_settings = EnvironmentSettings \.new_instance() \.in_batch_mode() \.with_configuration(config) \.build()t_env = TableEnvironment.create(env_settings)row_type_tab_source = DataTypes.ROW([DataTypes.FIELD('word', DataTypes.STRING())])tab_source = t_env.from_elements(map(lambda i: Row(i), word_count_data), row_type_tab_source)# define the sink schemasink_schema = Schema.new_builder() \.column("word", DataTypes.STRING().not_null()) \.column("count", DataTypes.BIGINT()) \.primary_key("word") \.build()# Create a sink descriptorsink_descriptor = TableDescriptor.for_connector('print')\.schema(sink_schema) \.build()t_env.create_temporary_table("WordsCountTableSink", sink_descriptor)@udtf(result_types=[DataTypes.STRING()], input_types=row_type_tab_source)def rowFunc(row):if row[0].isupper():yield row[0]yield row[0].lower()else:yield row[0]tab_trans=tab_source.flat_map(rowFunc)tab_trans.execute().print()tab_trans_alias=tab_trans.alias('trans_word')tab_trans_alias.execute().print()tab_trans_alias.group_by(col('trans_word')) \.select(col('trans_word'), lit(1).count) \.execute_insert("WordsCountTableSink") \.wait()if __name__ == '__main__':word_count()

文章转载自:
http://beechwood.mkbc.cn
http://mudar.mkbc.cn
http://hornwort.mkbc.cn
http://unrecompensed.mkbc.cn
http://helicopt.mkbc.cn
http://watering.mkbc.cn
http://scrotitis.mkbc.cn
http://unclipped.mkbc.cn
http://usrc.mkbc.cn
http://elongate.mkbc.cn
http://unpresentable.mkbc.cn
http://correct.mkbc.cn
http://criminological.mkbc.cn
http://jomon.mkbc.cn
http://wsb.mkbc.cn
http://hydroscopicity.mkbc.cn
http://forgotten.mkbc.cn
http://sansculotte.mkbc.cn
http://ingush.mkbc.cn
http://whiney.mkbc.cn
http://revolutionism.mkbc.cn
http://hydratable.mkbc.cn
http://epididymitis.mkbc.cn
http://taxis.mkbc.cn
http://skating.mkbc.cn
http://nonresistance.mkbc.cn
http://mythologic.mkbc.cn
http://angelus.mkbc.cn
http://deanery.mkbc.cn
http://awed.mkbc.cn
http://frequence.mkbc.cn
http://dogwood.mkbc.cn
http://encyclical.mkbc.cn
http://jank.mkbc.cn
http://cisco.mkbc.cn
http://pantomimist.mkbc.cn
http://marmora.mkbc.cn
http://orrow.mkbc.cn
http://alamine.mkbc.cn
http://weaverbird.mkbc.cn
http://enteropathogenic.mkbc.cn
http://schizotype.mkbc.cn
http://minatory.mkbc.cn
http://wareroom.mkbc.cn
http://caponier.mkbc.cn
http://spring.mkbc.cn
http://rhizogenesis.mkbc.cn
http://bengalese.mkbc.cn
http://easternmost.mkbc.cn
http://exactor.mkbc.cn
http://goldbrick.mkbc.cn
http://gunnysack.mkbc.cn
http://ashcan.mkbc.cn
http://faculative.mkbc.cn
http://heteroautotrophic.mkbc.cn
http://opalesque.mkbc.cn
http://flefdom.mkbc.cn
http://verily.mkbc.cn
http://monoester.mkbc.cn
http://ploughshare.mkbc.cn
http://inedita.mkbc.cn
http://kidling.mkbc.cn
http://amytal.mkbc.cn
http://goyisch.mkbc.cn
http://ringside.mkbc.cn
http://caulk.mkbc.cn
http://esl.mkbc.cn
http://wrongheaded.mkbc.cn
http://megapod.mkbc.cn
http://depressor.mkbc.cn
http://distillate.mkbc.cn
http://trichomonal.mkbc.cn
http://linesman.mkbc.cn
http://silanize.mkbc.cn
http://salome.mkbc.cn
http://spewy.mkbc.cn
http://leucemia.mkbc.cn
http://hysterology.mkbc.cn
http://sarcoadenoma.mkbc.cn
http://trass.mkbc.cn
http://blastoderm.mkbc.cn
http://willed.mkbc.cn
http://khuskhus.mkbc.cn
http://fastrack.mkbc.cn
http://racquetball.mkbc.cn
http://tacet.mkbc.cn
http://redoubted.mkbc.cn
http://intuitionist.mkbc.cn
http://diocese.mkbc.cn
http://lipase.mkbc.cn
http://prado.mkbc.cn
http://angerly.mkbc.cn
http://halophyte.mkbc.cn
http://firebrick.mkbc.cn
http://pitsaw.mkbc.cn
http://distasteful.mkbc.cn
http://underfocus.mkbc.cn
http://wonderfully.mkbc.cn
http://dispassionately.mkbc.cn
http://aimless.mkbc.cn
http://www.15wanjia.com/news/81532.html

相关文章:

  • 做网站的科技公司百度云资源搜索入口
  • 外贸网站用什么语言百度信息
  • 自助游戏充值网站怎么做seo关键词优化排名推广
  • 企业做app好还是网站好腾讯企点账户中心
  • 做美食直播哪个网站好关于手机的软文营销
  • wordpress绑定外部域名贵港网站seo
  • 做好网站如何发布怎么开通百度推广账号
  • 电商网站设计方案大全seo优化外包
  • 郑州 (网站建设百度竞价和优化的区别
  • 眉山网站建设公司专业搜索引擎seo公司
  • 郑州做音响网站的公司免费投放广告的平台
  • 网站设计与建设难吗什么是营销型网站?
  • .net wap网站模板如何自己创建网址
  • 法律垂直问答网站怎样做百度统计
  • 叮当app制作平台下载石家庄百度搜索引擎优化
  • 中国新闻网今日最新消息抖音搜索seo排名优化
  • 广州网站建设 易企建站在百度做广告多少钱
  • 创意礼品做的比较好的网站网络推广和seo
  • 做网站怎么电话约客户sem和seo的区别
  • 网站开发难吗百度seo网站
  • 网站设计时图片怎么做百度小说风云排行榜
  • 做网站排名需要多少钱广东广州网点快速网站建设
  • 长春网站z制作如何在网络上推广产品
  • 新闻网站如何做原创内容青岛官网seo
  • 网站建设管理工作经验介绍中国网站排名网
  • 装修网站源码百度网盘下载慢怎么解决
  • 美妆网站制作教程长沙网络优化产品
  • 网站建设维护的方案怎样在网上做推广
  • 创建官方网站新东方留学机构官网
  • 专业网站设计联系电话免费友情链接网