修剪Pyspark数据帧

时间:2017-07-31 11:40:50

标签: apache-spark pyspark spark-dataframe

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

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

无论如何,我可以做到这一点,而不依赖于此数据框中所有列的存在,并获取此数据帧中修剪的所有列。修剪数据帧后的数据应如下所示。

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

有人可以帮帮我吗?如何使用Pyspark数据框实现它?任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

输入:

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|
+---+-----+------+

答案 1 :(得分:0)

您可以在DataFrame API中使用dtypes函数来获取Cloumn Names列表及其数据类型,然后对于所有字符串列使用" trim"修剪值的功能。

此致

Neeraj

答案 2 :(得分:0)

在@ osbon123的答案中使用 trim() 功能。

from pyspark.sql.functions import trim

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

答案 3 :(得分:0)

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

# 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)