Как сказал @cricket_007, я бы не стал collect()
передавать ваши данные из Spark в файл в R.
Кроме того, не имеет смысла перебирать список SparkR::distinct()
городов, а затем выбирать все из этих таблиц, просто чтобы добавить их в некоторый выходной набор данных. Единственный раз, когда вы захотите это сделать, - это если вы пытаетесь выполнить другую операцию в каждой группе на основе некоторой условной логики или применить операцию к каждой группе, используя функцию, которая НЕ доступна в SparkR.
Я думаю, что вы пытаетесь получить фрейм данных (Spark или R) с наблюдениями, сгруппированными таким образом, чтобы при взгляде на них все было красиво. Для этого добавьте предложение GROUP BY city
в ваш первый запрос SQL. Оттуда просто запишите данные обратно в HDFS или другой выходной каталог. Из того, что я понимаю по вашему вопросу, возможно, что-то подобное поможет:
sdf <- SparkR::sql('SELECT SOME GREAT QUERY FROM TABLE GROUP BY city')
SparkR::write.parquet(sdf, path="path/to/desired/output/location", mode="append")
Это даст вам все ваши данные в одном файле, и они должны быть сгруппированы по city
, что, как я думаю, вы пытаетесь получить с помощью второго запроса в вашем вопросе.
Вы можете подтвердить, что вы хотите получить через:
newsdf<- SparkR::read.parquet(x="path/to/first/output/location/")
View(head(sdf, num=200))
Удачи, надеюсь, это поможет.