python pyspark -select中的if语句

u3r8eeie  于 2023-02-18  发布在  Python
关注(0)|答案(3)|浏览(166)

以下代码查找 Dataframe df中所有列的最大长度。

    • 问题**:在下面的代码中,我们如何检查字符串列的最大长度?
from pyspark.sql.functions import col, length, max

df=df.select([max(length(col(name))) for name in df.schema.names])
t40tm48m

t40tm48m1#

您可以添加一个测试df.schemadataType的条件。例如:

from pyspark.sql.types import StringType

df = spark.createDataFrame(
    [
        (1, '2', '1'),
        (1, '4', '2'),
        (1, '2', '3'),
    ],
    ['col1','col2','col3']
)

df.select([
    max(length(col(schema.name))).alias(f'{schema.name}_max_length') 
    for schema in df.schema 
    if schema.dataType == StringType()
])
    
+---------------+---------------+
|col2_max_length|col3_max_length|
+---------------+---------------+
|              1|              1|
+---------------+---------------+
abithluo

abithluo2#

除了使用schema.names,您还可以使用schema.fields返回StructField的列表,您可以迭代该列表并获取每个字段的名称和类型。

df.select([max(length(col(field.name))) for field in df.schema.fields if field.dataType.typeName == "string"])
2ul0zpep

2ul0zpep3#

df = df.select([max(length(col(name))) for (name, type) in df.dtypes if type == 'string'])

相关问题