2015-11-04 21 views
11

Tôi cần khung dữ liệu kết quả trong dòng bên dưới, để có tên bí danh "maxDiff" cho cột tối đa ('diff') sau groupBy. Tuy nhiên, các dòng dưới đây không makeany thay đổi, cũng không ném một lỗi.Bí danh cột sau groupBy trong pyspark

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

Trả lời

12

Điều này là do bạn đang đặt bí danh toàn bộ đối tượng DataFrame, không phải Column. Dưới đây là một ví dụ làm thế nào để bí danh Column chỉ:

import pyspark.sql.functions as func 

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

có .. hoạt động này .. ngoại trừ func đó. không yêu cầu – mhn

+1

không phải là nếu bạn đã nhập 'pyspark.sql.functions' vào tập lệnh – Nhor

25

Bạn có thể sử dụng agg thay vì gọi max phương pháp:

from pyspark.sql.functions import max 

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

Tôi thích câu trả lời được chấp nhận này vì nó không yêu cầu ai biết trước tên mà Spark sẽ cung cấp cho cột tổng hợp . – abeboparebop

0

Ngoài các câu trả lời đã ở đây, sau đây cũng là cách tiện lợi nếu bạn biết tên của cột tổng hợp, nơi bạn không phải nhập từ pyspark.sql.functions:

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

Xem docs để biết về .selectExpr()

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

Xem docs để biết về .withColumnRenamed()

Câu trả lời này, ở đây đi vào chi tiết hơn: https://stackoverflow.com/a/34077809

+0

** Bạn đã thử khối mã đầu tiên chưa? ** Có vẻ như sai. Spark không thể giải quyết tên cột bằng các cách được đề cập. Trong khối mã của bạn, spark cố gắng tìm cột ** diff ** và cố gắng chạy ** max ** function trên tập hợp đã cho nhưng grouped_data không chứa bất kỳ cột ** diff ** nào, nó chứa ** temp1.datestamp và max (diff) **. –

Các vấn đề liên quan