TRIM 和 TRIM 两者在 Spark 中的区别
Differences of TRIM and TRIM BOTH in Spark
我创建了一个名为 old_ticket_df
的 Spark SQL 临时视图。在临时视图 old_ticket_df
中,我有一列“approver”,它似乎有空格。我曾尝试使用 trim()
删除空格,但似乎没有效果。如果我尝试使用 trim(BOTH '\t' from approver)
删除空格,它似乎删除了空格。
我从下面的 compare_query
创建了一个名为 compare_df
的 Spark 数据框,我在其中将两个示例结合在一起,将 trim
函数的两个不同版本应用于同一字段和价值。代码的输出如下。
谁能告诉我 Spark SQL 中的 TRIM(approver)
和 TRIM(BOTH '\t' FROM approver)
有什么区别?
代码:
compare_query="""
select * from (
select 'ver1' as data_source, TRIM(BOTH '\t' FROM approver) as approver
from old_ticket_df
where ticketid='xxxxx'
and ticketlineid='yyyyyyy'
and storeid='00'
and dateclosed='2020-06-06'
union
select 'ver2' as data_source, TRIM(approver) as approver
from old_ticket_df
where ticketid='xxxxx'
and ticketlineid='yyyyyyy'
and storeid='00'
and dateclosed='2020-06-06'
)
"""
compare_df=spark.sql(compare_query)
compare_df.show(truncate=False)
输出:
+-----------+------------------------+
|data_source|approver |
+-----------+------------------------+
|ver2 |user1@GMAIL.COM |
|ver1 |user1@GMAIL.COM |
+-----------+------------------------+
trim(str)
仅删除 space 个字符。
trim(BOTH trimStr FROM str)
删除您在 trimStr
中指定的字符。
示例:
df = spark.createDataFrame([(' SPACES ', ), ('\tTABS\t', )], ['str'])
df.createOrReplaceTempView("sql_df")
spark.sql("""
SELECT str,
TRIM(str) as trim,
TRIM(BOTH '\t' FROM str) as trim_both_tab,
TRIM(BOTH ' \t' FROM str) as trim_both_tab_space
FROM sql_df
""").show()
#+--------+--------+-------------+-------------------+
#| str| trim|trim_both_tab|trim_both_tab_space|
#+--------+--------+-------------+-------------------+
#| SPACES | SPACES| SPACES | SPACES|
#|\tTABS\t|\tTABS\t| TABS| TABS|
#+--------+--------+-------------+-------------------+
- 列
str
是原始值“SPACES”(周围有 space 个字符)和值“\tTABS\t”(周围有制表符)。
- 第
trim
列显示 trim(str)
的结果。 Space 个字符被删减,但保留制表符。
- 第
trim_both_tab
列显示 TRIM(BOTH '\t' FROM str)
的结果。制表符被修剪,但 space 个字符保留。
- 列
trim_both_tab_space
显示 TRIM(BOTH ' \t' FROM str)
的结果。 space 和制表符都被删除了,因为它们都被提供了。
在你的情况下,TRIM(approver)
只删除了 spaces,所以在 ver2
行你仍然有制表符。虽然 TRIM(BOTH '\t' FROM approver)
只删除了选项卡,但 spaces 保持不变。
我创建了一个名为 old_ticket_df
的 Spark SQL 临时视图。在临时视图 old_ticket_df
中,我有一列“approver”,它似乎有空格。我曾尝试使用 trim()
删除空格,但似乎没有效果。如果我尝试使用 trim(BOTH '\t' from approver)
删除空格,它似乎删除了空格。
我从下面的 compare_query
创建了一个名为 compare_df
的 Spark 数据框,我在其中将两个示例结合在一起,将 trim
函数的两个不同版本应用于同一字段和价值。代码的输出如下。
谁能告诉我 Spark SQL 中的 TRIM(approver)
和 TRIM(BOTH '\t' FROM approver)
有什么区别?
代码:
compare_query="""
select * from (
select 'ver1' as data_source, TRIM(BOTH '\t' FROM approver) as approver
from old_ticket_df
where ticketid='xxxxx'
and ticketlineid='yyyyyyy'
and storeid='00'
and dateclosed='2020-06-06'
union
select 'ver2' as data_source, TRIM(approver) as approver
from old_ticket_df
where ticketid='xxxxx'
and ticketlineid='yyyyyyy'
and storeid='00'
and dateclosed='2020-06-06'
)
"""
compare_df=spark.sql(compare_query)
compare_df.show(truncate=False)
输出:
+-----------+------------------------+
|data_source|approver |
+-----------+------------------------+
|ver2 |user1@GMAIL.COM |
|ver1 |user1@GMAIL.COM |
+-----------+------------------------+
trim(str)
仅删除 space 个字符。
trim(BOTH trimStr FROM str)
删除您在 trimStr
中指定的字符。
示例:
df = spark.createDataFrame([(' SPACES ', ), ('\tTABS\t', )], ['str'])
df.createOrReplaceTempView("sql_df")
spark.sql("""
SELECT str,
TRIM(str) as trim,
TRIM(BOTH '\t' FROM str) as trim_both_tab,
TRIM(BOTH ' \t' FROM str) as trim_both_tab_space
FROM sql_df
""").show()
#+--------+--------+-------------+-------------------+
#| str| trim|trim_both_tab|trim_both_tab_space|
#+--------+--------+-------------+-------------------+
#| SPACES | SPACES| SPACES | SPACES|
#|\tTABS\t|\tTABS\t| TABS| TABS|
#+--------+--------+-------------+-------------------+
- 列
str
是原始值“SPACES”(周围有 space 个字符)和值“\tTABS\t”(周围有制表符)。 - 第
trim
列显示trim(str)
的结果。 Space 个字符被删减,但保留制表符。 - 第
trim_both_tab
列显示TRIM(BOTH '\t' FROM str)
的结果。制表符被修剪,但 space 个字符保留。 - 列
trim_both_tab_space
显示TRIM(BOTH ' \t' FROM str)
的结果。 space 和制表符都被删除了,因为它们都被提供了。
在你的情况下,TRIM(approver)
只删除了 spaces,所以在 ver2
行你仍然有制表符。虽然 TRIM(BOTH '\t' FROM approver)
只删除了选项卡,但 spaces 保持不变。