Как Sdd rdd внутренний элемент списка в Pyspark? - PullRequest
0 голосов
/ 05 декабря 2018

Я создал Rdd, как показано ниже

rdd=sc.parallelize([['A','C','B'], ['D','A','B','C'], ['C','B'],['B']])

Я хочу отсортировать элементы внутреннего списка.например, первый элемент внутри rdd - ['A','C','B'], но я хочу отсортировать как ['A','B','C']

мой ожидаемый результат:

 [['A','B','C'], ['A','B','C','D'], ['B','C'],['B']]

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Проще и, как правило, более эффективно (поскольку оптимизатор спарк работает с кадрами данных, тогда как вам нужно самостоятельно оптимизировать rdds), работать с кадрами данных, а не с rdds:

from pyspark.sql.functions import *
df=spark.createDataFrame([[['A','C','B']], [['D','A','B','C']], [['C','B']],[['B']]],['l'])
df.show()
+------------+
|           l|
+------------+
|   [A, C, B]|
|[D, A, B, C]|
|      [C, B]|
|         [B]|
+------------+

df.withColumn('l',sort_array('l')).show()
+------------+
|           l|
+------------+
|   [A, B, C]|
|[A, B, C, D]|
|      [B, C]|
|         [B]|
+------------+

, если вы все еще хотите использовать rdd, вы можетевсегда

rdd=df.withColumn('l',sort_array('l')).rdd
0 голосов
/ 05 декабря 2018

Я создал RDD, как вы упомянули в вопросе.

rdd = sc.parallelize([['A','C','B','A'], ['D','A','B','C'], ['C','B'],['B']])

Вы можете отсортировать отдельные элементы в rdd, используя функцию sorted.

rdd.map(lambda x: sorted(x)).collect()
[['A', 'A', 'B', 'C'], ['A', 'B', 'C', 'D'], ['B', 'C'], ['B']]
...