修剪Pyspark Dataframe

oogrdqng  于 2023-01-29  发布在  Spark
关注(0)|答案(5)|浏览(122)

我有一个Pyspark Dataframe (**原始 Dataframe **),包含以下数据(所有列都是字符串数据类型)。在我的用例中,我不确定此输入 Dataframe 中的所有列。用户只需向我传递 Dataframe 的名称,并要求我修剪此 Dataframe 的所有列。典型 Dataframe 中的数据如下所示:

id              Value         Value1
   1               "Text "       "Avb"
   2               1504         " Test"
   3               1               2

有没有任何方法可以做到这一点,而不依赖于所有列出现在这个 Dataframe ,并得到所有列修剪在这个 Dataframe 。数据修剪后,所有列的 Dataframe 应该看起来像。

id             Value        Value1
   1               "Text"       "Avb"
   2               1504         "Test"
   3               1               2

有人能帮我吗?我如何才能实现它使用Pyspark Dataframe ?任何帮助将不胜感激。

mlmc2os5

mlmc2os51#

输入:

df.show()

+---+-----+------+
| id|Value|Value1|
+---+-----+------+
|  1|Text |   Avb|
|  2| 1504|  Test|
|  3|    1|     2|
+---+-----+------+

代码:

import pyspark.sql.functions as func
for col in df.columns:
    df = df.withColumn(col, func.ltrim(func.rtrim(df[col])))

输出:

df.show()

+---+-----+------+
| id|Value|Value1|
+---+-----+------+
|  1| Text|   Avb|
|  2| 1504|  Test|
|  3|    1|     2|
+---+-----+------+
8i9zcol2

8i9zcol22#

在@osbon123的答案中使用***trim()***函数。

from pyspark.sql.functions import trim

for c_name in df.columns:
    df = df.withColumn(c_name, trim(col(c_name)))
rkkpypqq

rkkpypqq3#

这是我见过的最干净(也是计算效率最高)的方法来删除所有列中的所有空格,如果你想用下划线替换空格,只需用"_"替换""

# Standardize Column names no spaces to underscore
new_column_name_list = list(map(lambda x: x.replace(" ", ""), df.columns))
df = df.toDF(*new_column_name_list)
liwlm1x9

liwlm1x94#

您可以使用DataFrame API中的dtypes函数来获取Cloudn名称及其数据类型的列表,然后对所有字符串列使用"trim"函数来修剪值。
此致,
内拉伊

kokeuurv

kokeuurv5#

你应该避免使用withColumn,因为它会创建一个新的DataFrame,这对于非常大的 Dataframe 来说是非常耗时的。我基于这个solution创建了下面的函数,但是现在它可以处理任何 Dataframe ,即使它有字符串和非字符串列。

from pyspark.sql import functions as F

def trim_string_columns(of_data: DataFrame) -> DataFrame:
  data_trimmed = of_data.select([
    (F.trim(c.name).alias(c.name) if isinstance(c.dataType, StringType) else c.name) for c in of_data.schema
  ])
  return data_trimmed

相关问题