Help
RSS
API
Feed
Maltego
Contact
Domain > zhangnew.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2017-01-09
23.91.100.83
(
ClassC
)
2026-03-04
154.8.146.153
(
ClassC
)
Port 443
HTTP/1.1 200 OKAccept-Ranges: bytesAlt-Svc: h3:443; ma2592000Cache-Control: max-age86400Content-Type: text/htmlDate: Wed, 04 Mar 2026 11:27:42 GMTLast-Modified: Sat, 22 Nov 2025 05:41:19 GMTVary: accept-encodingTransfer-Encoding: chunked !DOCTYPE html>html langzh-CN>head> meta charsetUTF-8>meta nameviewport contentwidthdevice-width>meta nametheme-color content#222 media(prefers-color-scheme: light)>meta nametheme-color content#222 media(prefers-color-scheme: dark)>meta namegenerator contentHexo 6.3.0> link relapple-touch-icon sizes180x180 href/images/blog-favicon-apple.png> link relicon typeimage/png sizes32x32 href/images/blog-favicon-64x64.png> link relicon typeimage/png sizes16x16 href/images/blog-favicon-32x32.png> link relmask-icon href/images/blog-logo.png color#222>link relstylesheet href/css/main.css>link relstylesheet href/lib/@fortawesome/fontawesome-free/css/all.min.css integritysha256-yIDrPSXHZdOZhAqiBP7CKzIwMQmRCJ8UeB8Jo17YC4o crossoriginanonymous> link relstylesheet href/lib/@fancyapps/ui/dist/fancybox/fancybox.css integritysha256-6cQIC71/iBIYXFK+0RHAvwmjwWzkWd+r7v/BX3/vZDc crossoriginanonymous>script classnext-config data-namemain typeapplication/json>{hostname:zhangnew.com,root:/,images:/images,scheme:Mist,darkmode:true,version:8.19.1,exturl:false,sidebar:{position:right,display:post,padding:18,offset:12},copycode:{enable:false,style:null},fold:{enable:false,height:500},bookmark:{enable:false,color:#222,save:auto},mediumzoom:false,lazyload:false,pangu:false,comments:{style:tabs,active:null,storage:true,lazyload:false,nav:null},stickytabs:false,motion:{enable:false,async:false,transition:{menu_item:fadeInDown,post_block:fadeIn,post_header:fadeInDown,post_body:fadeInDown,coll_header:fadeInLeft,sidebar:fadeInUp}},prism:false,i18n:{placeholder:搜索...,empty:没有找到任何搜索结果:${query},hits_time:找到 ${hits} 个搜索结果(用时 ${time} 毫秒),hits:找到 ${hits} 个搜索结果},path:/search.json,localsearch:{enable:true,trigger:auto,top_n_per_article:1,unescape:false,preload:false}}/script>script src/js/config.js>/script> meta namedescription content欢迎访问我的个人博客站 — zhangnew.com,博主从事大数据行业,有笑话,有音乐,有文艺,随时欢迎您的光临!联系邮箱: zhangneww#gmail.com>meta propertyog:type contentwebsite>meta propertyog:title contentzhangnew>meta propertyog:url contenthttps://zhangnew.com/index.html>meta propertyog:site_name contentzhangnew>meta propertyog:description content欢迎访问我的个人博客站 — zhangnew.com,博主从事大数据行业,有笑话,有音乐,有文艺,随时欢迎您的光临!联系邮箱: zhangneww#gmail.com>meta propertyog:locale contentzh_CN>meta propertyarticle:author contentzhangnew>meta nametwitter:card contentsummary>link relcanonical hrefhttps://zhangnew.com/>script classnext-config data-namepage typeapplication/json>{sidebar:,isHome:true,isPost:false,lang:zh-CN,comments:,permalink:,path:index.html,title:}/script>script classnext-config data-namecalendar typeapplication/json>/script>title>zhangnew/title> script async srchttps://www.googletagmanager.com/gtag/js?idUA-72135531-1>/script> script classnext-config data-namegoogle_analytics typeapplication/json>{tracking_id:UA-72135531-1,only_pageview:false,measure_protocol_api_secret:null}/script> script src/js/third-party/analytics/google-analytics.js>/script> script async defer data-website-id4de47e08-a16c-4437-a7bb-383ecfe1c830 srchttps://tj.zhangnew.com/service.js data-host-urlhttps://tj.zhangnew.com/>/script>link reldns-prefetch hrefhttps://waline.zhangnew.com> noscript> link relstylesheet href/css/noscript.css> /noscript>link relalternate href/atom.xml titlezhangnew typeapplication/atom+xml>/head>body itemscope itemtypehttp://schema.org/WebPage> div classheadband>/div> main classmain> div classcolumn> header classheader itemscope itemtypehttp://schema.org/WPHeader>div classsite-brand-container> div classsite-nav-toggle> div classtoggle aria-label切换导航栏 rolebutton> span classtoggle-line>/span> span classtoggle-line>/span> span classtoggle-line>/span> /div> /div> div classsite-meta> a href/ classbrand relstart> i classlogo-line>/i> h1 classsite-title>zhangnew/h1> i classlogo-line>/i> /a> p classsite-subtitle itempropdescription>认真你就赢了/p> /div> div classsite-nav-right> div classtoggle popup-trigger aria-label搜索 rolebutton> i classfa fa-search fa-fw fa-lg>/i> /div> /div>/div>nav classsite-nav> ul classmain-menu menu>li classmenu-item menu-item-home>a href/ relsection>i classfa fa-home fa-fw>/i>首页/a>/li>li classmenu-item menu-item-about>a href/about/ relsection>i classfa fa-user fa-fw>/i>关于/a>/li>li classmenu-item menu-item-tags>a href/tags/ relsection>i classfa fa-tags fa-fw>/i>标签/a>/li>li classmenu-item menu-item-categories>a href/categories/ relsection>i classfa fa-th fa-fw>/i>分类/a>/li>li classmenu-item menu-item-archives>a href/archives/ relsection>i classfa fa-archive fa-fw>/i>归档/a>/li> li classmenu-item menu-item-search> a rolebutton classpopup-trigger>i classfa fa-search fa-fw>/i>搜索 /a> /li> /ul>/nav> div classsearch-pop-overlay> div classpopup search-popup>div classsearch-header> span classsearch-icon> i classfa fa-search>/i> /span> div classsearch-input-container> input autocompleteoff autocapitalizeoff maxlength80 placeholder搜索... spellcheckfalse typesearch classsearch-input> /div> span classpopup-btn-close rolebutton> i classfa fa-times-circle>/i> /span>/div>div classsearch-result-container no-result> div classsearch-result-icon> i classfa fa-spinner fa-pulse fa-5x>/i> /div>/div> /div> /div>/header> aside classsidebar> div classsidebar-inner sidebar-overview-active> ul classsidebar-nav> li classsidebar-nav-toc> 文章目录 /li> li classsidebar-nav-overview> 站点概览 /li> /ul> div classsidebar-panel-container> !--noindex--> div classpost-toc-wrap sidebar-panel> /div> !--/noindex--> div classsite-overview-wrap sidebar-panel> div classsite-author animated itempropauthor itemscope itemtypehttp://schema.org/Person> p classsite-author-name itempropname>zhangnew/p> div classsite-description itempropdescription>欢迎访问我的个人博客站 — zhangnew.com,博主从事大数据行业,有笑话,有音乐,有文艺,随时欢迎您的光临!联系邮箱: zhangneww#gmail.com/div>/div>div classsite-state-wrap animated> nav classsite-state> div classsite-state-item site-state-posts> a href/archives/> span classsite-state-item-count>104/span> span classsite-state-item-name>日志/span> /a> /div> div classsite-state-item site-state-categories> a href/categories/> span classsite-state-item-count>30/span> span classsite-state-item-name>分类/span>/a> /div> div classsite-state-item site-state-tags> a href/tags/> span classsite-state-item-count>121/span> span classsite-state-item-name>标签/span>/a> /div> /nav>/div> div classlinks-of-author animated> span classlinks-of-author-item> a hrefhttps://github.com/zhangnew titleGitHub → https://github.com/zhangnew relnoopener me target_blank>i classfab fa-github fa-fw>/i>GitHub/a> /span> span classlinks-of-author-item> a hrefhttp://www.linkedin.com/in/zhangnew titleLinkedin → http://www.linkedin.com/in/zhangnew relnoopener me target_blank>i classfab fa-linkedin fa-fw>/i>Linkedin/a> /span> /div>div classcategory-all-page> div classcategory-all> ul classcategory-list>li classcategory-list-item>a classcategory-list-link href/categories/Android/>Android/a>span classcategory-list-count>4/span>/li>li classcategory-list-item>a classcategory-list-link href/categories/Blog-System/>Blog System/a>span classcategory-list-count>15/span>/li>li classcategory-list-item>a classcategory-list-link href/categories/%E5%85%B6%E4%BB%96/>其他/a>span classcategory-list-count>40/span>/li>li classcategory-list-item>a classcategory-list-link href/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/>大数据/a>span classcategory-list-count>19/span>/li>li classcategory-list-item>a classcategory-list-link href/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/>操作系统/a>span classcategory-list-count>11/span>/li>li classcategory-list-item>a classcategory-list-link href/categories/%E6%9C%AA%E5%88%86%E7%B1%BB/>未分类/a>span classcategory-list-count>1/span>/li>li classcategory-list-item>a classcategory-list-link href/categories/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/>编程语言/a>span classcategory-list-count>13/span>/li>/ul> /div>/div> /div> /div> div classback-to-top animated rolebutton aria-label返回顶部> i classfa fa-arrow-up>/i> span>0%/span> /div> /div> /aside> /div> div classmain-inner index posts-expand> div classpost-block> article itemscope itemtypehttp://schema.org/Article classpost-content lang> link itempropmainEntityOfPage hrefhttps://zhangnew.com/spark-partition-pushdown.html> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropimage content/images/avatar.gif> meta itempropname contentzhangnew> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentzhangnew> meta itempropdescription content欢迎访问我的个人博客站 — zhangnew.com,博主从事大数据行业,有笑话,有音乐,有文艺,随时欢迎您的光临!联系邮箱: zhangneww#gmail.com> /span> span hidden itemproppost itemscope itemtypehttp://schema.org/CreativeWork> meta itempropname contentundefined | zhangnew> meta itempropdescription content> /span> header classpost-header> h2 classpost-title itempropname headline> a href/spark-partition-pushdown.html classpost-title-link itempropurl>Spark 自定义逻辑优化器之分区下推优化/a> /h2> div classpost-meta-container> div classpost-meta> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar>/i> /span> span classpost-meta-item-text>发表于/span> time title创建时间:2024-02-03 19:00:00 itempropdateCreated datePublished datetime2024-02-03T19:00:00+00:00>2024-02-03/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar-check>/i> /span> span classpost-meta-item-text>更新于/span> time title修改时间:2025-11-22 05:39:13 itempropdateModified datetime2025-11-22T05:39:13+00:00>2025-11-22/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-folder>/i> /span> span classpost-meta-item-text>分类于/span> span itempropabout itemscope itemtypehttp://schema.org/Thing> a href/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/ itempropurl relindex>span itempropname>大数据/span>/a> /span> , span itempropabout itemscope itemtypehttp://schema.org/Thing> a href/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Spark/ itempropurl relindex>span itempropname>Spark/span>/a> /span> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-comment>/i> /span> span classpost-meta-item-text>评论数:/span> a titlewaline href/spark-partition-pushdown.html#waline itempropdiscussionUrl> span classpost-comments-count waline-comment-count data-path/spark-partition-pushdown.html itempropcommentCount>/span> /a> /span> span classpost-meta-item title阅读次数> span classpost-meta-item-icon> i classfar fa-eye>/i> /span> span classpost-meta-item-text>阅读次数:/span> span classwaline-pageview-count data-path/spark-partition-pushdown.html>/span> /span> /div> /div> /header> div classpost-body itemproparticleBody> p>书接上回,a hrefspark-catalyst-sql-extension.html>如何不修改 Spark 源码对 Spark Catalyst 引擎扩展/a> 中介绍了如何自定义 Spark Catalyst 引擎,这次再来一个实践中的场景:在数据量很大的接入任务中,对表进行分区,此分区对用户隐藏,当用户根据指定的时间字段过滤查询的时候,自动加上分区过滤条件。/p>p>img src/images/spark-partition-pusdown.jpeg alt题图 by DALL·E 3>/p>h2 id概述>a href#概述 classheaderlink title概述>/a>概述/h2>p>这里优化的一个前提是用户在配置接入任务过程中,需要标记一个时间字段,用于分区存储优化,然后再接入过程中对此字段进行解析,保存到分区 code>yearyyyy/monthMM/daydd/code> 中。/p>p>比如时间字段是 ctime,用户 SQL 是 code>where ctime > '2022-11-30 12:00:00'/code> 进过我们的优化规则之后,会变成 code>where ctime > '2022-11-30 12:00:00' AND concat(year, month, day) > '20221130'/code>;甚至用户可以使用 code>substring/code> 函数,比如 code>where substring(ctime, 1, 10) > '2021-12-12'/code> 也可以优化为 code>where substring(ctime, 1, 10) > '2021-12-12' AND concat(year, month, day) > '20211212'/code>,当然这里其实不是修改 SQL,而是修改的逻辑执行计划。/p>p>一个测试 SQL:code>select * from test where dt > '2022-11-30 00:00:00'/code>/p>p>strong>未经优化的逻辑计划:/strong>/p>figure classhighlight plaintext>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>/pre>/td>td classcode>pre>span classline>Project id#0, dt#1, year#2, month#3, day#4/span>br>span classline>+- Filter (isnotnull(dt#1) AND (dt#1 > 2022-11-30 00:00:00))/span>br>span classline> +- FileScan parquet xx.testid#0,dt#1,year#2,month#3,day#4 Batched: true, DataFilters: isnotnull(dt#1), (dt#1 > 2022-11-30 00:00:00), Format: Parquet, Location: CatalogFileIndex(1 paths)hdfs://xx.db/test, PartitionFilters: , PushedFilters: IsNotNull(dt), GreaterThan(dt,2022-11-30 00:00:00), ReadSchema: struct<id:string,dt:string>/span>br>/pre>/td>/tr>/table>/figure>p>strong>优化后:code>PartitionFilters/code> 部分正是我们添加的分区过滤条件/strong>/p>figure classhighlight plaintext>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>/pre>/td>td classcode>pre>span classline>Project id#0, dt#1, year#2, month#3, day#4/span>br>span classline>+- Filter (isnotnull(dt#1) AND (dt#1 > 2022-11-30 00:00:00))/span>br>span classline> +- FileScan parquet xx.testid#0,dt#1,year#2,month#3,day#4 Batched: true, DataFilters: isnotnull(dt#1), (dt#1 > 2022-11-30 00:00:00), Format: Parquet, Location: InMemoryFileIndex(2 paths)hdfs://xx.db/test/year2022/month12/day..., PartitionFilters: (concat(year#2, month#3, day#4) > 20221130), PushedFilters: IsNotNull(dt), GreaterThan(dt,2022-11-30 00:00:00), ReadSchema: struct<id:string,dt:string>/span>br>/pre>/td>/tr>/table>/figure> !--noindex--> div classpost-button> a classbtn href/spark-partition-pushdown.html#more relcontents> 阅读全文 » /a> /div> !--/noindex--> /div> footer classpost-footer> div classpost-eof>/div> /footer> /article>/div> div classpost-block> article itemscope itemtypehttp://schema.org/Article classpost-content lang> link itempropmainEntityOfPage hrefhttps://zhangnew.com/spark-3.2-string-implicit-to-timestamp.html> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropimage content/images/avatar.gif> meta itempropname contentzhangnew> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentzhangnew> meta itempropdescription content欢迎访问我的个人博客站 — zhangnew.com,博主从事大数据行业,有笑话,有音乐,有文艺,随时欢迎您的光临!联系邮箱: zhangneww#gmail.com> /span> span hidden itemproppost itemscope itemtypehttp://schema.org/CreativeWork> meta itempropname contentundefined | zhangnew> meta itempropdescription content> /span> header classpost-header> h2 classpost-title itempropname headline> a href/spark-3.2-string-implicit-to-timestamp.html classpost-title-link itempropurl>Spark 3.2 String 类型无法隐式转换为 Timestamp 类型/a> /h2> div classpost-meta-container> div classpost-meta> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar>/i> /span> span classpost-meta-item-text>发表于/span> time title创建时间:2023-02-05 21:42:00 itempropdateCreated datePublished datetime2023-02-05T21:42:00+00:00>2023-02-05/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar-check>/i> /span> span classpost-meta-item-text>更新于/span> time title修改时间:2025-11-22 05:39:13 itempropdateModified datetime2025-11-22T05:39:13+00:00>2025-11-22/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-folder>/i> /span> span classpost-meta-item-text>分类于/span> span itempropabout itemscope itemtypehttp://schema.org/Thing> a href/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/ itempropurl relindex>span itempropname>大数据/span>/a> /span> , span itempropabout itemscope itemtypehttp://schema.org/Thing> a href/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Spark/ itempropurl relindex>span itempropname>Spark/span>/a> /span> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-comment>/i> /span> span classpost-meta-item-text>评论数:/span> a titlewaline href/spark-3.2-string-implicit-to-timestamp.html#waline itempropdiscussionUrl> span classpost-comments-count waline-comment-count data-path/spark-3.2-string-implicit-to-timestamp.html itempropcommentCount>/span> /a> /span> span classpost-meta-item title阅读次数> span classpost-meta-item-icon> i classfar fa-eye>/i> /span> span classpost-meta-item-text>阅读次数:/span> span classwaline-pageview-count data-path/spark-3.2-string-implicit-to-timestamp.html>/span> /span> /div> /div> /header> div classpost-body itemproparticleBody> p>太长不看版:Spark 3.2 之后为了兼容 strong>ANSI SQL/strong> 标准,修改了 Interval 的数据类型(CalendarIntervalType → YearMonthIntervalType),代码中只写了 code>String → CalendarIntervalType/code>的隐式转换规则,这里新版需要配置 code>spark.sql.legacy.interval.enabledtrue/code> 来让 Interval 使用旧的数据类型(CalendarIntervalType)。/p>p>img src/images/spark-3.2-string-implicit-to-timestamp.jpeg alt题图 by DALL·E 3>/p>h1 id问题描述>a href#问题描述 classheaderlink title问题描述>/a>问题描述/h1>p>最近将项目从 Spark 2.4 升级到 Spark 3.2.2 之后发现一个 SQL 报错:/p>figure classhighlight scala>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>/pre>/td>td classcode>pre>span classline>scala> spark.sql(span classstring>"select '2022-11-12 23:33:55' - INTERVAL 3 YEAR"/span>)/span>br>span classline>org.apache.spark.sql.span classtype>AnalysisException/span>: cannot resolve '(span classtype>CAST/span>('span classnumber>2022/span>span classnumber>-11/span>span classnumber>-12/span> span classnumber>23/span>:span classnumber>33/span>:span classnumber>55/span>' span classtype>AS/span> span classtype>DOUBLE/span>) - span classtype>INTERVAL/span> 'span classnumber>3/span>' span classtype>YEAR/span>)' due to data span classclass>span classkeyword>type/span> span classtitle>mismatch/span>/span>: differing types in '(span classtype>CAST/span>('span classnumber>2022/span>span classnumber>-11/span>span classnumber>-12/span> span classnumber>23/span>:span classnumber>33/span>:span classnumber>55/span>' span classtype>AS/span> span classtype>DOUBLE/span>) - span classtype>INTERVAL/span> 'span classnumber>3/span>' span classtype>YEAR/span>)' (double and interval year).; line span classnumber>1/span> pos span classnumber>7/span>;/span>br>span classline>'span classtype>Project/span> unresolvedalias((cast(span classnumber>2022/span>span classnumber>-11/span>span classnumber>-12/span> span classnumber>23/span>:span classnumber>33/span>:span classnumber>55/span> as double) - span classtype>INTERVAL/span> 'span classnumber>3/span>' span classtype>YEAR/span>), span classtype>None/span>)/span>br>span classline>+- span classtype>OneRowRelation/span>/span>br>/pre>/td>/tr>/table>/figure>p>而在 Spark 2.4 中可以正常执行:/p>figure classhighlight scala>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>span classline>6/span>br>/pre>/td>td classcode>pre>span classline>scala> spark.sql(span classstring>"select '2022-11-12 23:33:55' - INTERVAL 3 YEAR"/span>).show/span>br>span classline>+-------------------------------------------------------------------------+/span>br>span classline>|span classtype>CAST/span>(span classtype>CAST/span>(span classnumber>2022/span>span classnumber>-11/span>span classnumber>-12/span> span classnumber>23/span>:span classnumber>33/span>:span classnumber>55/span> span classtype>AS/span> span classtype>TIMESTAMP/span>) - interval span classnumber>3/span> years span classtype>AS/span> span classtype>STRING/span>)|/span>br>span classline>+-------------------------------------------------------------------------+/span>br>span classline>| span classnumber>2019/span>span classnumber>-11/span>span classnumber>-12/span> span classnumber>23/span>:span classnumber>33/span>:span classnumber>55/span>|/span>br>span classline>+-------------------------------------------------------------------------+/span>br>/pre>/td>/tr>/table>/figure>p>这里可以看到,Spark 2.4 中 code>String/code> 和 code>Interval/code> 类型做运算时,自动将 code>String/code> 类型转为了 code>Timestamp/code> 类型,而在 Spark 3.2 中却把 code>String/code> 类型转为了 code>Double/code> 类型,导致计算报错。/p> !--noindex--> div classpost-button> a classbtn href/spark-3.2-string-implicit-to-timestamp.html#more relcontents> 阅读全文 » /a> /div> !--/noindex--> /div> footer classpost-footer> div classpost-eof>/div> /footer> /article>/div> div classpost-block> article itemscope itemtypehttp://schema.org/Article classpost-content lang> link itempropmainEntityOfPage hrefhttps://zhangnew.com/spark-table-name-case-insensitive.html> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropimage content/images/avatar.gif> meta itempropname contentzhangnew> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentzhangnew> meta itempropdescription content欢迎访问我的个人博客站 — zhangnew.com,博主从事大数据行业,有笑话,有音乐,有文艺,随时欢迎您的光临!联系邮箱: zhangneww#gmail.com> /span> span hidden itemproppost itemscope itemtypehttp://schema.org/CreativeWork> meta itempropname contentundefined | zhangnew> meta itempropdescription content> /span> header classpost-header> h2 classpost-title itempropname headline> a href/spark-table-name-case-insensitive.html classpost-title-link itempropurl>Spark 表名大小写问题/a> /h2> div classpost-meta-container> div classpost-meta> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar>/i> /span> span classpost-meta-item-text>发表于/span> time title创建时间:2023-01-01 16:15:11 itempropdateCreated datePublished datetime2023-01-01T16:15:11+00:00>2023-01-01/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar-check>/i> /span> span classpost-meta-item-text>更新于/span> time title修改时间:2025-11-22 05:39:13 itempropdateModified datetime2025-11-22T05:39:13+00:00>2025-11-22/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-folder>/i> /span> span classpost-meta-item-text>分类于/span> span itempropabout itemscope itemtypehttp://schema.org/Thing> a href/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/ itempropurl relindex>span itempropname>大数据/span>/a> /span> , span itempropabout itemscope itemtypehttp://schema.org/Thing> a href/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Spark/ itempropurl relindex>span itempropname>Spark/span>/a> /span> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-comment>/i> /span> span classpost-meta-item-text>评论数:/span> a titlewaline href/spark-table-name-case-insensitive.html#waline itempropdiscussionUrl> span classpost-comments-count waline-comment-count data-path/spark-table-name-case-insensitive.html itempropcommentCount>/span> /a> /span> span classpost-meta-item title阅读次数> span classpost-meta-item-icon> i classfar fa-eye>/i> /span> span classpost-meta-item-text>阅读次数:/span> span classwaline-pageview-count data-path/spark-table-name-case-insensitive.html>/span> /span> /div> /div> /header> div classpost-body itemproparticleBody> p>根据 a target_blank relnoopener hrefhttps://spark.apache.org/docs/latest/sql-ref-identifier.html>Spark 官方文档/a>,表名是大小写不敏感的,大写会自动转小写:/p>blockquote>p>An identifier is a string used to identify a database object such as a table, view, schema, column, etc. Spark SQL has regular identifiers and delimited identifiers, which are enclosed within backticks. Both regular identifiers and delimited identifiers are case-insensitive./p>/blockquote>h1 id问题描述>a href#问题描述 classheaderlink title问题描述>/a>问题描述/h1>p>Spark 1.4 之后新增了字段名大小写敏感的开关,经测试,开启之后会导致一些问题;/p>h2 idcannot-resolve-‘Tb-xx’-given-input-columns>a href#cannot-resolve-‘Tb-xx’-given-input-columns classheaderlink titlecannot resolve ‘Tb.xx’ given input columns>/a>cannot resolve ‘Tb.xx’ given input columns/h2>h3 id开启大小写敏感-spark-sql-caseSensitive-true>a href#开启大小写敏感-spark-sql-caseSensitive-true classheaderlink title开启大小写敏感 spark.sql.caseSensitivetrue>/a>开启大小写敏感 code>spark.sql.caseSensitivetrue/code>/h3>p>如果表名包含大写字母,比如 code>Tb1/code> 然后执行 code>select Tb1.xx/code> 就会报错,因为 code>Tb1/code> 表名会被转为 code>tb1/code>,Spark 的元数据中只有 code>tb1.xx/code> 字段。/p> !--noindex--> div classpost-button> a classbtn href/spark-table-name-case-insensitive.html#more relcontents> 阅读全文 » /a> /div> !--/noindex--> /div> footer classpost-footer> div classpost-eof>/div> /footer> /article>/div> div classpost-block> article itemscope itemtypehttp://schema.org/Article classpost-content lang> link itempropmainEntityOfPage hrefhttps://zhangnew.com/spark-catalyst-sql-extension.html> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropimage content/images/avatar.gif> meta itempropname contentzhangnew> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentzhangnew> meta itempropdescription content欢迎访问我的个人博客站 — zhangnew.com,博主从事大数据行业,有笑话,有音乐,有文艺,随时欢迎您的光临!联系邮箱: zhangneww#gmail.com> /span> span hidden itemproppost itemscope itemtypehttp://schema.org/CreativeWork> meta itempropname contentundefined | zhangnew> meta itempropdescription content> /span> header classpost-header> h2 classpost-title itempropname headline> a href/spark-catalyst-sql-extension.html classpost-title-link itempropurl>如何不修改 Spark 源码对 Spark Catalyst 引擎扩展/a> /h2> div classpost-meta-container> div classpost-meta> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar>/i> /span> span classpost-meta-item-text>发表于/span> time title创建时间:2022-12-10 21:07:00 itempropdateCreated datePublished datetime2022-12-10T21:07:00+00:00>2022-12-10/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar-check>/i> /span> span classpost-meta-item-text>更新于/span> time title修改时间:2025-11-22 05:39:13 itempropdateModified datetime2025-11-22T05:39:13+00:00>2025-11-22/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-folder>/i> /span> span classpost-meta-item-text>分类于/span> span itempropabout itemscope itemtypehttp://schema.org/Thing> a href/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/ itempropurl relindex>span itempropname>大数据/span>/a> /span> , span itempropabout itemscope itemtypehttp://schema.org/Thing> a href/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Spark/ itempropurl relindex>span itempropname>Spark/span>/a> /span> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-comment>/i> /span> span classpost-meta-item-text>评论数:/span> a titlewaline href/spark-catalyst-sql-extension.html#waline itempropdiscussionUrl> span classpost-comments-count waline-comment-count data-path/spark-catalyst-sql-extension.html itempropcommentCount>/span> /a> /span> span classpost-meta-item title阅读次数> span classpost-meta-item-icon> i classfar fa-eye>/i> /span> span classpost-meta-item-text>阅读次数:/span> span classwaline-pageview-count data-path/spark-catalyst-sql-extension.html>/span> /span> /div> /div> /header> div classpost-body itemproparticleBody> p>书接上回,a hrefspark-catalyst-sql.html>上篇文章/a> 概述了一下 Spark SQL 源码中的基本概念和解析流程,这篇文章介绍一种扩展方法。/p>p>img src/images/spark-catalyst-sql-extension-1.png alt圆角表示为 Catalyst 部分>/p>p>从 Spark 2.2 之后,Spark 支持扩展 Catalyst 引擎。扩展点如下表:/p>table>thead>tr>th alignleft>Stage/th>th alignleft>Extension/th>th alignleft>description/th>/tr>/thead>tbody>tr>td alignleft>Parser/td>td alignleft>injectParser/td>td alignleft>负责 SQL 解析/td>/tr>tr>td alignleft>Analyzer/td>td alignleft>injectResolutionRulebr />injectPostHocResolutionRulebr />injectCheckRule/td>td alignleft>负责逻辑执行计划生成,catalog 绑定,以及进行各种检查/td>/tr>tr>td alignleft>Optimizer/td>td alignleft>injectOptimizerRule/td>td alignleft>负责逻辑执行计划的优化/td>/tr>tr>td alignleft>Planner/td>td alignleft>injectPlannerStrategy/td>td alignleft>负责物理执行计划的生成/td>/tr>/tbody>/table>p>在 Spark 3.x 之后,又额外提供了一些其他扩展点:/p>ul>li>e.injectColumnar:底层读写文件相关/li>li>e.injectFunction:增加内置函数/li>li>e.injectQueryStagePrepRule:优化 AQE/li>/ul>p>注意这里只能新增扩展,无法修改已有的规则,实在不行的还得去改 Spark 源码。/p> !--noindex--> div classpost-button> a classbtn href/spark-catalyst-sql-extension.html#more relcontents> 阅读全文 » /a> /div> !--/noindex--> /div> footer classpost-footer> div classpost-eof>/div> /footer> /article>/div> div classpost-block> article itemscope itemtypehttp://schema.org/Article classpost-content lang> link itempropmainEntityOfPage hrefhttps://zhangnew.com/spark-catalyst-sql.html> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropimage content/images/avatar.gif> meta itempropname contentzhangnew> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentzhangnew> meta itempropdescription content欢迎访问我的个人博客站 — zhangnew.com,博主从事大数据行业,有笑话,有音乐,有文艺,随时欢迎您的光临!联系邮箱: zhangneww#gmail.com> /span> span hidden itemproppost itemscope itemtypehttp://schema.org/CreativeWork> meta itempropname contentundefined | zhangnew> meta itempropdescription content> /span> header classpost-header> h2 classpost-title itempropname headline> a href/spark-catalyst-sql.html classpost-title-link itempropurl>Spark SQL 解析流程概述/a> /h2> div classpost-meta-container> div classpost-meta> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar>/i> /span> span classpost-meta-item-text>发表于/span> time title创建时间:2022-11-20 21:42:00 itempropdateCreated datePublished datetime2022-11-20T21:42:00+00:00>2022-11-20/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar-check>/i> /span> span classpost-meta-item-text>更新于/span> time title修改时间:2025-11-22 05:39:13 itempropdateModified datetime2025-11-22T05:39:13+00:00>2025-11-22/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-folder>/i> /span> span classpost-meta-item-text>分类于/span> span itempropabout itemscope itemtypehttp://schema.org/Thing> a href/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/ itempropurl relindex>span itempropname>大数据/span>/a> /span> , span itempropabout itemscope itemtypehttp://schema.org/Thing> a href/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Spark/ itempropurl relindex>span itempropname>Spark/span>/a> /span> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-comment>/i> /span> span classpost-meta-item-text>评论数:/span> a titlewaline href/spark-catalyst-sql.html#waline itempropdiscussionUrl> span classpost-comments-count waline-comment-count data-path/spark-catalyst-sql.html itempropcommentCount>/span> /a> /span> span classpost-meta-item title阅读次数> span classpost-meta-item-icon> i classfar fa-eye>/i> /span> span classpost-meta-item-text>阅读次数:/span> span classwaline-pageview-count data-path/spark-catalyst-sql.html>/span> /span> /div> /div> /header> div classpost-body itemproparticleBody> p>img src/images/spark-catalyst-sql-extension-1.png alt圆角表示为 Catalyst 部分>/p>h1 id基本概念>a href#基本概念 classheaderlink title基本概念>/a>基本概念/h1>h2 id树-TreeNode>a href#树-TreeNode classheaderlink title树 TreeNode>/a>树 TreeNode/h2>p>解析过程中的各种计划(plan)都是树,树的节点是各种表达式,比如 code>x + (1 + 2)/code> 由三种表达式(expression)组合:/p>ul>li>Literal(value: Int): 一个常量,比如 1 和 2/li>li>Attribute(name: String): 字段,比如 x/li>li>Add(left: TreeNode, right: TreeNode): 一个加法表达式/li>/ul>p> code>x + (1 + 2)/code> 即:code>Add(Attribute(x), Add(Literal(1), Literal(2)))/code> 注意括号顺序/p>p>转为 Spark 的 TreeNode 就是如下的形式:/p>p>img src/images/spark-catalyst-sql-extension-2.png altTreeNode>/p>h2 id规则-Rule>a href#规则-Rule classheaderlink title规则 Rule>/a>规则 Rule/h2>p>规则一般是指对 plan 的转换,比如一个简单的常量替换(ConstantFolding)规则如下(非真实代码):/p>figure classhighlight scala>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>span classline>3/span>br>span classline>4/span>br>span classline>5/span>br>/pre>/td>td classcode>pre>span classline>plan.transform {/span>br>span classline> span classkeyword>case/span> span classtype>Add/span>(span classtype>Literal/span>(c1), span classtype>Literal/span>(c2)) > span classtype>Literal/span>(c1+c2)/span>br>span classline> span classkeyword>case/span> span classtype>Add/span>(left, span classtype>Literal/span>(span classnumber>0/span>)) > left/span>br>span classline> span classkeyword>case/span> span classtype>Add/span>(span classtype>Literal/span>(span classnumber>0/span>), right) > right/span>br>span classline>}/span>br>/pre>/td>/tr>/table>/figure>p>这里的 transform 是对 plan 中节点进行遍历,通过使用 Scala 语法中的模式匹配功能,只对 plan 中匹配到的节点进行优化处理。br> Rule 都会多次执行,直到 plan 不再变化,比如 code>(x+0) + (1+2+3)/code> 需要多次执行上面的 Rule 优化才能完全替换所有常量。/p> !--noindex--> div classpost-button> a classbtn href/spark-catalyst-sql.html#more relcontents> 阅读全文 » /a> /div> !--/noindex--> /div> footer classpost-footer> div classpost-eof>/div> /footer> /article>/div> div classpost-block> article itemscope itemtypehttp://schema.org/Article classpost-content lang> link itempropmainEntityOfPage hrefhttps://zhangnew.com/hadoop-native-macos-arm.html> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropimage content/images/avatar.gif> meta itempropname contentzhangnew> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentzhangnew> meta itempropdescription content欢迎访问我的个人博客站 — zhangnew.com,博主从事大数据行业,有笑话,有音乐,有文艺,随时欢迎您的光临!联系邮箱: zhangneww#gmail.com> /span> span hidden itemproppost itemscope itemtypehttp://schema.org/CreativeWork> meta itempropname contentundefined | zhangnew> meta itempropdescription content> /span> header classpost-header> h2 classpost-title itempropname headline> a href/hadoop-native-macos-arm.html classpost-title-link itempropurl>macOS m1 m2 芯片编译 Hadoop native 库, 消除警告信息/a> /h2> div classpost-meta-container> div classpost-meta> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar>/i> /span> span classpost-meta-item-text>发表于/span> time title创建时间:2022-10-04 19:55:40 itempropdateCreated datePublished datetime2022-10-04T19:55:40+00:00>2022-10-04/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar-check>/i> /span> span classpost-meta-item-text>更新于/span> time title修改时间:2025-11-22 05:39:13 itempropdateModified datetime2025-11-22T05:39:13+00:00>2025-11-22/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-folder>/i> /span> span classpost-meta-item-text>分类于/span> span itempropabout itemscope itemtypehttp://schema.org/Thing> a href/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/ itempropurl relindex>span itempropname>大数据/span>/a> /span> , span itempropabout itemscope itemtypehttp://schema.org/Thing> a href/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Hadoop/ itempropurl relindex>span itempropname>Hadoop/span>/a> /span> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-comment>/i> /span> span classpost-meta-item-text>评论数:/span> a titlewaline href/hadoop-native-macos-arm.html#waline itempropdiscussionUrl> span classpost-comments-count waline-comment-count data-path/hadoop-native-macos-arm.html itempropcommentCount>/span> /a> /span> span classpost-meta-item title阅读次数> span classpost-meta-item-icon> i classfar fa-eye>/i> /span> span classpost-meta-item-text>阅读次数:/span> span classwaline-pageview-count data-path/hadoop-native-macos-arm.html>/span> /span> /div> /div> /header> div classpost-body itemproparticleBody> p>默认情况下,直接运行 Hadoop 命令会出现如下警告:/p>figure classhighlight plaintext>table>tr>td classgutter>pre>span classline>1/span>br>span classline>2/span>br>/pre>/td>td classcode>pre>span classline>WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform.../span>br>span classline>using builtin-java classes where applicable/span>br>/pre>/td>/tr>/table>/figure>p>当然这个警告信息没有什么实质的影响,一般也不会在本地电脑运行计算任务,消除警告只是强迫症发作罢了。br>这里提供了编译好的a target_blank relnoopener hrefhttps://github.com/zhangnew/hadoop-native-macos/tree/main/ARM>二进制文件/a>,但是版本不全,需要手动编译的参考下面的内容。br>另有 Intel CPU 版本的a target_blank relnoopener hrefhttps://github.com/healchow/hadoop-native-macos>二进制文件/a>。我上面仓库中编译的 ARM 版本也 merge 到此仓库了。br>只需要将对应版本 code>hadoop-x.x.x/lib/native/code> 下的文件,strong>替换/strong>到本地 code>${HADOOP_HOME}/lib/native/code> 中即可,不需要重启集群。/p>p>另外还有一个更简单的办法,修改日志等级,就不会打印这条警告日志了,只需要在 code>${HADOOP_HOME}/etc/hadoop/log4j.properties/code> 里面加上下面这一行即可:/p>figure classhighlight plaintext>table>tr>td classgutter>pre>span classline>1/span>br>/pre>/td>td classcode>pre>span classline>log4j.logger.org.apache.hadoop.util.NativeCodeLoaderERROR/span>br>/pre>/td>/tr>/table>/figure> !--noindex--> div classpost-button> a classbtn href/hadoop-native-macos-arm.html#more relcontents> 阅读全文 » /a> /div> !--/noindex--> /div> footer classpost-footer> div classpost-eof>/div> /footer> /article>/div> div classpost-block> article itemscope itemtypehttp://schema.org/Article classpost-content lang> link itempropmainEntityOfPage hrefhttps://zhangnew.com/isso-to-waline.html> span hidden itempropauthor itemscope itemtypehttp://schema.org/Person> meta itempropimage content/images/avatar.gif> meta itempropname contentzhangnew> /span> span hidden itemproppublisher itemscope itemtypehttp://schema.org/Organization> meta itempropname contentzhangnew> meta itempropdescription content欢迎访问我的个人博客站 — zhangnew.com,博主从事大数据行业,有笑话,有音乐,有文艺,随时欢迎您的光临!联系邮箱: zhangneww#gmail.com> /span> span hidden itemproppost itemscope itemtypehttp://schema.org/CreativeWork> meta itempropname contentundefined | zhangnew> meta itempropdescription content> /span> header classpost-header> h2 classpost-title itempropname headline> a href/isso-to-waline.html classpost-title-link itempropurl>从 Isso 迁移到 Waline/a> /h2> div classpost-meta-container> div classpost-meta> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar>/i> /span> span classpost-meta-item-text>发表于/span> time title创建时间:2022-05-22 23:31:46 itempropdateCreated datePublished datetime2022-05-22T23:31:46+00:00>2022-05-22/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-calendar-check>/i> /span> span classpost-meta-item-text>更新于/span> time title修改时间:2025-11-22 05:39:13 itempropdateModified datetime2025-11-22T05:39:13+00:00>2025-11-22/time> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-folder>/i> /span> span classpost-meta-item-text>分类于/span> span itempropabout itemscope itemtypehttp://schema.org/Thing> a href/categories/Blog-System/ itempropurl relindex>span itempropname>Blog System/span>/a> /span> /span> span classpost-meta-item> span classpost-meta-item-icon> i classfar fa-comment>/i> /span> span classpost-meta-item-text>评论数:/span> a titlewaline href/isso-to-waline.html#waline itempropdiscussionUrl> span classpost-comments-count waline-comment-count data-path/isso-to-waline.html itempropcommentCount>/span> /a> /span> span classpost-meta-item title阅读次数> span classpost-meta-item-icon> i classfar fa-eye>/i> /span> span classpost-meta-item-text>阅读次数:/span> span classwaline-pageview-count data-path/isso-to-waline.html>/span> /span> /div> /div> /header> div classpost-body itemproparticleBody> p>之前很长一段时间都是使用 Isso 作为评论系统,最近发现了一个 Valine 的替代品:a target_blank relnoopener hrefhttps://waline.js.org/>strong>Waline/strong>/a>,更加符合需求,花了一个周末迁移了一下,写了个脚本,记录一下。/p>p>先说下 Waline 的特性,也是比较吸引我的点:/p>ul>li>支持 Markdown、表情、公式/li>li>支持内容校验、防灌水/li>li>允许匿名、也支持登录/li>li>可以完全自托管独立部署/li>li>支持浏览量统计/li>li>多种通知方式/li>/ul> !--noindex--> div classpost-button> a classbtn href/isso-to-waline.html#more relcontents> 阅读全文 » /a> /div> !--/noindex--> /div> footer classpost-footer> div classpost-eof>/div> /footer> /article>/div> nav classpagination> span classpage-number current>1/span>a classpage-number href/page/2/>2/a>span classspace>…/span>a classpage-number href/page/15/>15/a>a classextend next relnext title下一页 aria-label下一页 href/page/2/>i classfa fa-angle-right>/i>/a> /nav>/div> /main> footer classfooter> div classfooter-inner> div classbeian>a hrefhttps://beian.miit.gov.cn/ relnoopener target_blank>冀ICP备15002938号 /a> /div> div classcopyright> © 2013 – span itempropcopyrightYear>2025/span> span classwith-love> i classfa fa-heart>/i> /span> span classauthor itempropcopyrightHolder>zhangnew/span> /div> div classpowered-by>由 a hrefhttps://hexo.io/ relnoopener target_blank>Hexo/a> & a hrefhttps://theme-next.js.org/mist/ relnoopener target_blank>NexT.Mist/a> 强力驱动 /div> /div> /footer> div classtoggle sidebar-toggle rolebutton> span classtoggle-line>/span> span classtoggle-line>/span> span classtoggle-line>/span> /div> div classsidebar-dimmer>/div>noscript> div classnoscript-warning>Theme NexT works best with JavaScript enabled/div>/noscript> script src/lib/animejs/lib/anime.min.js integritysha256-XL2inqUJaslATFnHdJOi9GfQ60on8Wx1C2H8DYiN1xY crossoriginanonymous>/script> script src/lib/@fancyapps/ui/dist/fancybox/fancybox.umd.js integritysha256-ytMJGN3toR+a84u7g7NuHm91VIR06Q41kMWDr2pq7Zo crossoriginanonymous>/script>script src/js/comments.js>/script>script src/js/utils.js>/script>script src/js/schemes/muse.js>/script>script src/js/next-boot.js>/script> script src/lib/hexo-generator-searchdb/dist/search.js integritysha256-1kfA5uHPf65M5cphT2dvymhkuyHPQp5A53EGZOnOLmc crossoriginanonymous>/script>script src/js/third-party/search/local-search.js>/script> script src/js/third-party/fancybox.js>/script> script classnext-config data-namewaline typeapplication/json>{lang:zh-CN,enable:true,serverURL:https://waline.zhangnew.com,cssUrl:/css/waline.css,commentCount:true,pageview:true,dark:auto,copyright:true,imageUploader:false,libUrl:/js/third-party/waline.js,emoji:https://unpkg.com/@waline/emojis@1.0.1/weibo,https://unpkg.com/@waline/emojis@1.0.1/alus,https://unpkg.com/@waline/emojis@1.0.1/bilibili,https://unpkg.com/@waline/emojis@1.0.1/qq,https://unpkg.com/@waline/emojis@1.0.1/tieba,https://unpkg.com/@waline/emojis@1.0.1/tw-emoji,meta:nick,mail,link,requiredMeta:nick,mail,wordLimit:1000,pageSize:15,reaction:true,el:#waline,comment:true,path:/}/script>link relstylesheet href/css/waline.css>script>document.addEventListener(page:loaded, () > { NexT.utils.loadComments(CONFIG.waline.el).then(() > NexT.utils.getScript(CONFIG.waline.libUrl, { condition: window.Waline }) ).then(() > Waline.init(Object.assign({}, CONFIG.waline,{ el: document.querySelector(CONFIG.waline.el) })) );});/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]