sparksql中的类SQL
我正在尝试使用一个类似的条件在Spark SQL中实现一个连接 我正在执行联接的行如下所示,称为“修订”: 表A:sparksql中的类SQL,sql,regex,apache-spark,apache-spark-sql,Sql,Regex,Apache Spark,Apache Spark Sql,我正在尝试使用一个类似的条件在Spark SQL中实现一个连接 我正在执行联接的行如下所示,称为“修订”: 表A: 8NXDPVAE 表B: [4,8]NXD_V% 在SQL server上执行联接(A.revision LIKE B.revision)工作正常,但在Spark SQL中执行相同操作时,联接不会返回任何行(如果使用内部联接)或表B的空值(如果使用外部联接) 这是我正在运行的查询: val joined = spark.sql("SELECT A.revision, B.rev
8NXDPVAE
表B:
[4,8]NXD_V%
在SQL server上执行联接(A.revision LIKE B.revision
)工作正常,但在Spark SQL中执行相同操作时,联接不会返回任何行(如果使用内部联接)或表B的空值(如果使用外部联接)
这是我正在运行的查询:
val joined = spark.sql("SELECT A.revision, B.revision FROM RAWDATA A LEFT JOIN TPTYPE B ON A.revision LIKE B.revision")
计划如下:
== Physical Plan ==
BroadcastNestedLoopJoin BuildLeft, LeftOuter, revision#15 LIKE revision#282, false
:- BroadcastExchange IdentityBroadcastMode
: +- *Project [revision#15]
: +- *Scan JDBCRelation(RAWDATA) [revision#15] PushedFilters: [EqualTo(bulk_id,2016092419270100198)], ReadSchema: struct<revision>
+- *Scan JDBCRelation(TPTYPE) [revision#282] ReadSchema: struct<revision>
==物理计划==
BroadcastedNestedLoopJoin BuildLeft,LeftOuter,修订版#15类似修订版#282,false
:-BroadcastExchange标识广播模式
:+-*项目[修订版#15]
:+-*扫描JDBCRelation(RAWDATA)[revision#15]PushedFilters:[EqualTo(bulk_id,2016092419270100198)],ReadSchema:struct
+-*扫描jdbcorrelation(TPTYPE)[修订版#282]ReadSchema:struct
是否可以执行类似的连接,或者我离此很远?您只差一点点。Spark SQL和Hive遵循SQL标准约定,其中
LIKE
运算符只接受两个特殊字符:
(下划线)-匹配任意字符的
(百分比)-匹配任意字符序列的%
[4,8]
只匹配[4,8]
文字:
spark.sql("SELECT '[4,8]' LIKE '[4,8]'").show
+----------------+
|[4,8]类似于[4,8]|
+----------------+
|真的|
+----------------+
要匹配复杂模式,可以使用支持Java正则表达式的RLIKE
运算符:
spark.sql("SELECT '8NXDPVAE' RLIKE '^[4,8]NXD.V.*$'").show
+-----------------------------+
|8NXDPVAE RLIKE^[4,8]NXD.V*$|
+-----------------------------+
|真的|
+-----------------------------+
spark scala api中类似的语法:
dataframe.filter(col("columns_name").like("regex"))