您如何将 PySpark 中的第一个字母大写用于数据集? (简单capitalization/sentence案例)
How do you capitalize just the first letter in PySpark for a dataset? (Simple capitalization/sentence case)
我需要清理几个字段:species/description通常是首字母大写的简单大写。 PySpark 只有 upper、lower 和 initcap(每个单词都大写),这不是我要找的。 https://spark.apache.org/docs/2.0.1/api/python/_modules/pyspark/sql/functions.html
Python 有一个本机 capitalize() 函数,我一直在尝试使用它,但一直收到对列的错误调用。
fields_to_cap = ['species', 'description']
for col_name in fields_to_cap:
df = df.withColumn(col_name, df[col_name].captilize())
有没有办法轻松地将这些字段大写?
明确地说,我试图将字段中的数据大写。这是一个例子:
当前:
“这是一个描述。”
预计:
“这是描述。”
您可以通过拆分首字母和其余字母来使用变通方法,将首字母设为大写,将其余字母设为小写,然后将它们连接回去
import pyspark.sql.functions as F
df = spark.createDataFrame([[1, 'rush HouR'],
[2, 'kung-Fu Panda'],
[3, 'titaniC'],
[4, 'the Sixth sense']], schema="id int, title string")
df = df.withColumn('title_capitalize', F.concat(F.upper(F.expr("substring(title, 1, 1)")),
F.lower(F.expr("substring(title, 2)"))))
df.show()
+---+---------------+----------------+
| id| title|title_capitalize|
+---+---------------+----------------+
| 1| rush HouR| Rush hour|
| 2| kung-Fu Panda| Kung-fu panda|
| 3| titaniC| Titanic|
| 4|the Sixth sense| The sixth sense|
+---+---------------+----------------+
或者如果您想坚持使用 Python 的 .capitalize()
,您可以使用 UDF
from pyspark.sql.types import StringType
udf_capitalize = F.udf(lambda x: str(x).capitalize(), StringType())
df = df.withColumn('title_capitalize', udf_capitalize('title'))
使用initcap
data = [
(1001, 'jana', 'yes'),
(1001, 'Jleo', 'no')
]
df = spark.createDataFrame(data, ['SID','species', 'description']).show()
+----+-------+-----------+
| SID|species|description|
+----+-------+-----------+
|1001| jana| yes|
|1001| Jleo| no|
+----+-------+-----------+
from pyspark.sql.functions import *
df.withColumn("species", initcap(col('species'))).withColumn("description", initcap(col('description'))).show()
+----+-------+-----------+
| SID|species|description|
+----+-------+-----------+
|1001| Jana| Yes|
|1001| Jleo| No|
+----+-------+-----------+
我需要清理几个字段:species/description通常是首字母大写的简单大写。 PySpark 只有 upper、lower 和 initcap(每个单词都大写),这不是我要找的。 https://spark.apache.org/docs/2.0.1/api/python/_modules/pyspark/sql/functions.html
Python 有一个本机 capitalize() 函数,我一直在尝试使用它,但一直收到对列的错误调用。
fields_to_cap = ['species', 'description']
for col_name in fields_to_cap:
df = df.withColumn(col_name, df[col_name].captilize())
有没有办法轻松地将这些字段大写?
明确地说,我试图将字段中的数据大写。这是一个例子:
当前: “这是一个描述。”
预计: “这是描述。”
您可以通过拆分首字母和其余字母来使用变通方法,将首字母设为大写,将其余字母设为小写,然后将它们连接回去
import pyspark.sql.functions as F
df = spark.createDataFrame([[1, 'rush HouR'],
[2, 'kung-Fu Panda'],
[3, 'titaniC'],
[4, 'the Sixth sense']], schema="id int, title string")
df = df.withColumn('title_capitalize', F.concat(F.upper(F.expr("substring(title, 1, 1)")),
F.lower(F.expr("substring(title, 2)"))))
df.show()
+---+---------------+----------------+
| id| title|title_capitalize|
+---+---------------+----------------+
| 1| rush HouR| Rush hour|
| 2| kung-Fu Panda| Kung-fu panda|
| 3| titaniC| Titanic|
| 4|the Sixth sense| The sixth sense|
+---+---------------+----------------+
或者如果您想坚持使用 Python 的 .capitalize()
from pyspark.sql.types import StringType
udf_capitalize = F.udf(lambda x: str(x).capitalize(), StringType())
df = df.withColumn('title_capitalize', udf_capitalize('title'))
使用initcap
data = [
(1001, 'jana', 'yes'),
(1001, 'Jleo', 'no')
]
df = spark.createDataFrame(data, ['SID','species', 'description']).show()
+----+-------+-----------+
| SID|species|description|
+----+-------+-----------+
|1001| jana| yes|
|1001| Jleo| no|
+----+-------+-----------+
from pyspark.sql.functions import *
df.withColumn("species", initcap(col('species'))).withColumn("description", initcap(col('description'))).show()
+----+-------+-----------+
| SID|species|description|
+----+-------+-----------+
|1001| Jana| Yes|
|1001| Jleo| No|
+----+-------+-----------+