Мне нужно выполнить математическую операцию для всех комбинаций столбцов моего фрейма данных. В R я сделал бы это с помощью простого вложенного цикла. Но в sparkR я не думаю, что цикл доступен. Как бы вы посоветовали мне с этим справиться?Что такое эквивалент цикла for в sparkR?
ответ
Вы можете использовать foreach функция.
Еогеасп (РДД, FUNC)
foreachPartition (РДД, FUNC)
Пример:
##To print each element in an RDD
foreach(rdd, function(x) { print(x) })
Вы можете Направить Documentation for package ‘SparkR’
документ, который вы предоставили, предназначен для версии 0.1. Сейчас я использую 1.6. Функция больше не доступна. – avinash
@avinash продолжение нашего разговора в комментариях. ИМО важно иметь в виду, изучая/исследуя SparkR, задачи, которые лучше всего использовать Spark, по сравнению с теми вещами, которые лучше всего делать вне SparkR. Энергия Spark заключается в обработке больших наборов данных, поэтому в вашей задаче вычисление сумм столбцов подходит для распределенной вычислительной мощности Spark. Однако Spark не предоставляет возможности для обработки отдельных значений, просто DataFrames и столбцов. Следовательно, математика по итоговым значениям столбцов лучше всего делать за пределами Spark. Вот как я бы подойти к вашей проблеме:
# prep R data.frame
col1 <- c(1,2,3)
col2 <- c(4,5,6)
col3 <- c(7,8,9)
rdf <- data.frame(col1, col2, col3)
# create spark DataFrame
sdf <- createDataFrame(sqlContext, rdf)
# use spark to calc totals
sdfSums <- agg(sdf, col1="sum", col2="sum", col3="sum")
names(sdfSums) <- c("col1Sum", "col2Sum", "col3Sum")
# collect the resulting 1 row DataFrame back into an R data.frame
rdfSums <- collect(sdfSums)
# do the math on the values in R
for (i in 1:ncol(rdfSums)){
for (j in 1:ncol(rdfSums)){
if (i != j) {
print( paste("column",i,"minus column", j,"equals", rdfSums[,i]-rdfSums[,j]))
}
}
}
Я надеюсь, что помогает
Это лучше, если вы используете SqlContext для вашего случая, хотя вы не предоставили никакой воспроизводимый код.
- 1. Что такое эквивалент цикла for-each в jQuery?
- 2. Что такое эквивалент lodash для обратного цикла?
- 3. Что такое эквивалент C# для этого цикла?
- 4. Сделать эквивалент цикла «For»
- 5. Что такое эквивалент MATLAB прямого цикла Java над элементами?
- 6. Что такое "?" среднее значение в параметрах цикла for в JavaScript?
- 7. Что такое эквивалент ereg()
- 8. Что такое параметрический эквивалент?
- 9. Что такое эквивалент mysqli?
- 10. Что такое эквивалент Python стандартного для цикла Java?
- 11. Что такое эквивалент в php?
- 12. Что такое эквивалент в XAML
- 13. Что такое эквивалент C# для Java «for (String currLine: allLines)»?
- 14. Что такое pymysql3 эквивалент django.db.backends.mysql
- 15. Что такое delphichromiumembedded for?
- 16. Что такое edgeForExtendedLayout: for?
- 17. Что такое синтаксис for (;;) {}?
- 18. Что такое SynchronizationContext.IsWaitNotificationRequired for?
- 19. Что такое эквивалент JavaScript для цикла Enumerable # Ruby?
- 20. C++: что такое :: for?
- 21. Что такое `DataFrameGroupBy`-эквивалент` dict.keys`?
- 22. Что такое linux-эквивалент sys.getwindowsversion()
- 23. Что такое эквивалент Rubygem '-I'?
- 24. Что такое эквивалент python «new» в C++
- 25. Что такое эквивалент bash всего Python?
- 26. Что такое эквивалент Eclipse IntelliJ «Живые шаблоны»?
- 27. Что такое Ruby-эквивалент preg_quote()?
- 28. Что такое сервлет-эквивалент Server.MapPath?
- 29. Что такое эквивалент C++ UINT32_MAX?
- 30. Что такое perl-эквивалент MAX_INT?
Было бы полезно узнать, что вам нужно для повторения. В пределах обычной петли R вы можете вызывать функции SparkR. Например, вы можете использовать цикл R для цикла и перебирать список R data.frames и преобразовывать их в Spark DataFrames и вызывать на них функцию SparkR glm(). Это то, что вы пытаетесь выполнить итерацию через SparkR DataFrame? Если да, то что нужно делать с каждой строкой, и для чего вам нужна распределенная вычислительная мощность Spark, чтобы сделать что-то в одной строке? Итерация означает делать вещи по одному - Искра - это делать вещи параллельно. – SpiritusPrana
Кроме того, имейте в виду, что если вы итерации используете цикл R for() в Spark DataFrame, он будет выбирать по одному столбцу за раз. 'for (item в mySparkDF) {str (item)}' возвращает по одному столбцу за раз. – SpiritusPrana
@SpiritusPrana - мне нужно перебирать столбцы, а не строки. И каждая итерация независима, поэтому распределенная среда должна быть полезна. Пример того, что я пытаюсь сделать, это если у меня есть df с столбцами -col1, col2, col3. мне нужно выполнить - sum (col1) -sum (col2); сумма (col1) - сумма (3); и т. д. для всех комбинаций столбцов –
avinash