1

いくつかの yelp データに対して分析を実行しようとしています。データは次のように構成されています。

>>> yelp_df.printSchema()
root
 |-- business_id: string (nullable = true)
 |-- cool: integer (nullable = true)
 |-- date: string (nullable = true)
 |-- funny: integer (nullable = true)
 |-- id: string (nullable = true)
 |-- stars: integer (nullable = true)
 |-- text: string (nullable = true)
 |-- type: string (nullable = true)
 |-- useful: integer (nullable = true)
 |-- user_id: string (nullable = true)
 |-- name: string (nullable = true)
 |-- full_address: string (nullable = true)
 |-- latitude: double (nullable = true)
 |-- longitude: double (nullable = true)
 |-- neighborhoods: string (nullable = true)
 |-- open: boolean (nullable = true)
 |-- review_count: integer (nullable = true)
 |-- state: string (nullable = true)

現在開いているレビューが 10 件以上ある全体の各州のレコードを数え、3 番目に多い州を見つけたいと考えています。最初にやった

>>> revDF = yelp_df.filter(yelp_df.review_count > 9)
>>> openDF = revDF.filter(revDF.open == True)
>>> openDF.groupBy("state").agg({"review_count":"sum"}).collect()

これはこれを与える

[Row(state=u'MN', SUM(review_count#16)=3470), Row(state=u'GA', SUM(review_count#16)=5764), Row(state=u'TX', SUM(review_count#16)=1778), Row(state=u'AZ', SUM(review_count#16)=72214), Row(state=u'NY', SUM(review_count#16)=4081), Row(state=u'OR', SUM(review_count#16)=2125), Row(state=u'ID', SUM(review_count#16)=429), Row(state=u'CA', SUM(review_count#16)=1876), Row(state=u'CO', SUM(review_count#16)=6720), Row(state=u'WA', SUM(review_count#16)=525), Row(state=u'LA', SUM(review_count#16)=8394)]

それをsummedDFに保存した後、

summedDF.sort(summedDF.state.desc()).collect()

州ごとに並べ替えても問題ありませんが、(当然のことながら)

summedDF.sort(summedDF.SUM(review_count#16).desc()).collect()

動作しません。実際、それも実行されません。正しい数の括弧がありますが、実行する代わりに、...前に次の行に移動し、新しい入力を待ちます。

どうすればそのソートを行うことができますか? 非実行で何が起こっていますか? #16はどうですか?

4

1 に答える 1

3

編集: pyspark の追加バージョン。

コードを次のようにリファクタリングすることをお勧めします。

val finalDF = yelp_df
  .where(col("review_count") > 9 && col("open") === true)
  .groupBy("state")
  .agg(sum("review_count").as("sum_column"))
  .sort(col("sum_column").desc)

pyspark に適応できるかもしれません:

from pyspark.sql.functions import *
finalDF = yelp_df \
    .where((col("review_count") > 9) & (col("open") == True)) \
    .groupBy("state") \
    .agg(col("state"), sum(col("review_count")).alias("sum_column")) \
    .sort(col("sum_column").desc())

今あなたの質問に:

不実行で何が起こっているのですか?#16はどうですか?

つまり、を使用して列を参照しようとしてsummedDF.SUM(review_count#16)もうまくいきませんでした。

このsort関数は、Columnオブジェクト ( を呼び出して作成できます) を使用するかcol("name")、列の名前を直接使用します。ただし、集計を行ったときに、合計を表す新しい列の名前を選択しなかったため、後で参照するのが少し難しくなります。これを解決するため.as("sum_column")に、4 行目の を使用しました。

于 2016-05-04T17:48:34.360 に答える