web-dev-qa-db-ja.com

pysparkのgroupByの後の列エイリアス

GroupByの後のmax( 'diff')列にエイリアス名 "maxDiff"を持たせるために、下の行に結果のデータフレームが必要です。ただし、次の行は変更を加えず、エラーもスローしません。

 grpdf = joined_df.groupBy(temp1.datestamp).max('diff').alias("maxDiff")
20
mhn

これは、DataFrameではなく、Columnオブジェクト全体をエイリアスしているためです。 Columnのみをエイリアスする方法の例を次に示します。

import pyspark.sql.functions as func

grpdf = joined_df \
    .groupBy(temp1.datestamp) \
    .max('diff') \
    .select(func.col("max(diff)").alias("maxDiff"))
25
Nhor

aggメソッドを呼び出す代わりにmaxを使用できます。

from pyspark.sql.functions import max

joined_df.groupBy(temp1.datestamp).agg(max("diff").alias("maxDiff"))

同様にScalaでも

import org.Apache.spark.sql.functions.max

joined_df.groupBy($"datestamp").agg(max("diff").alias("maxDiff"))

または

joined_df.groupBy($"datestamp").agg(max("diff").as("maxDiff"))
52
zero323

ここで既に答えていることに加えて、_pyspark.sql.functions_からインポートする必要のない集約列の名前がわかっている場合、次の方法も便利です。

1

_grouped_df = joined_df.groupBy(temp1.datestamp) \
                      .max('diff') \
                      .selectExpr('max(diff) AS maxDiff')
_

.selectExpr()の詳細については、 docs を参照してください

2

_grouped_df = joined_df.groupBy(temp1.datestamp) \
                      .max('diff') \
                      .withColumnRenamed('max(diff)', 'maxDiff')
_

.withColumnRenamed()の詳細については、 docs を参照してください

ここでのこの答えはより詳細になります: https://stackoverflow.com/a/34077809

1
vk1011