1
次の質問は、PySparkのバージョン1.5.0に固有のものです。新しい機能がPySparkに絶えず追加されているためです。PySpark 1.5.0では、列 `x`の値に基づいて` y`列のすべての項目をリストする方法はありますか?
列x
の値に基づいて、列y
のすべての項目を一覧表示するにはどうすればよいですか?たとえば :
+---+--------+
| x| y |
+---+--------+
|foo| [1, 1] |
|bar| [10, 2]|
|bar| [999] |
+---+--------+
順番は関係ありません:
rdd = sc.parallelize([ {'x': "foo", 'y': 1},
{'x': "foo", 'y': 1},
{'x': "bar", 'y': 10},
{'x': "bar", 'y': 2},
{'x': 'qux', 'y':999}])
df = sqlCtx.createDataFrame(rdd)
df.show()
+---+---+
| x| y|
+---+---+
|foo| 1|
|foo| 1|
|bar| 10|
|bar| 2|
|qux|999|
+---+---+
私のようなものを持っていると思います。
pd = df.toPandas()
pd.groupby('x')['y'].apply(list).reset_index()
しかし、版1.5.0でgroupBy
集約機能は非常に限られているようだ:パンダでは、私はこのusign GROUPBYを達成することができます。どのようにこの制限を克服するか考えていますか?
+1ですが、私の目的ではOPは1.5で、collect_listは1.6で新しく追加されました。http://spark.apache.org/docs/latest/api /python/pyspark.sql.html?highlight=dataframe#pyspark.sql.functions.collect_list – Paul
誰かが 'group_by' +' collect_list'を 'rdd.groupBy'と比較して効率、ロバストネスなどを見てきましたか? – Paul
@Paul 'collect_list'はHive UDAFで、ネイティブのSpark操作ではありません。 1.6.0では 'DataFrame' APIラッパーが導入されました。そのため、 'expr'(またはSQLクエリ)を介してここで使用する必要があります。 – zero323