【问题标题】:Differences of TRIM and TRIM BOTH in SparkSpark中TRIM和TRIM BOTH的区别
【发布时间】:2022-07-28 02:57:08
【问题描述】:

我创建了一个名为 old_ticket_df 的 Spark SQL 临时视图。在临时视图old_ticket_df 我有一个似乎有空格的“批准者”列。我尝试使用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) - Removes the leading and trailing space characters from str. trim(BOTH trimStr FROM str) - Remove the leading and trailing trimStr characters from str ---- 所以默认情况下修剪会删除空格,而您可以使用两者自定义输入修剪字符串。此处的文档:spark.apache.org/docs/2.3.0/api/sql/index.html#trim

标签: dataframe apache-spark pyspark apache-spark-sql trim


【解决方案1】:

trim(str) 仅删除空格字符。
trim(BOTH trimStr FROM str) 删除您在trimStr 中指定的字符。

Spark's trim documentation

例子:

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”(周围有空格字符),值为“\tTABS\t”(周围有制表符)。
  • trim 列显示trim(str) 的结果。空格字符被修剪,但制表符仍然存在。
  • trim_both_tab 列显示TRIM(BOTH '\t' FROM str) 的结果。制表符被修剪,但空格字符仍然存在。
  • trim_both_tab_space 列显示TRIM(BOTH ' \t' FROM str) 的结果。空格和制表符都被删除了,因为它们都是提供的。

在你的情况下,TRIM(approver) 只删除了空格,所以在ver2 行中你仍然有标签。而TRIM(BOTH '\t' FROM approver) 只删除了标签,保留了空格。

【讨论】:

    猜你喜欢
    • 2020-07-08
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多