aboutsummaryrefslogtreecommitdiff
path: root/R
diff options
context:
space:
mode:
authorFelix Cheung <felixcheung_m@hotmail.com>2017-01-27 12:41:35 -0800
committerShivaram Venkataraman <shivaram@cs.berkeley.edu>2017-01-27 12:41:35 -0800
commita7ab6f9a8fdfb927f0bcefdc87a92cc82fac4223 (patch)
tree8f5850893af01ee02696387e371d1a66a4edafe5 /R
parent385d73848b0d274467b633c7615e03b370f4a634 (diff)
downloadspark-a7ab6f9a8fdfb927f0bcefdc87a92cc82fac4223.tar.gz
spark-a7ab6f9a8fdfb927f0bcefdc87a92cc82fac4223.tar.bz2
spark-a7ab6f9a8fdfb927f0bcefdc87a92cc82fac4223.zip
[SPARK-19324][SPARKR] Spark VJM stdout output is getting dropped in SparkR
## What changes were proposed in this pull request? This affects mostly running job from the driver in client mode when results are expected to be through stdout (which should be somewhat rare, but possible) Before: ``` > a <- as.DataFrame(cars) > b <- group_by(a, "dist") > c <- count(b) > sparkR.callJMethod(c$countjc, "explain", TRUE) NULL ``` After: ``` > a <- as.DataFrame(cars) > b <- group_by(a, "dist") > c <- count(b) > sparkR.callJMethod(c$countjc, "explain", TRUE) count#11L NULL ``` Now, `column.explain()` doesn't seem very useful (we can get more extensive output with `DataFrame.explain()`) but there are other more complex examples with calls of `println` in Scala/JVM side, that are getting dropped. ## How was this patch tested? manual Author: Felix Cheung <felixcheung_m@hotmail.com> Closes #16670 from felixcheung/rjvmstdout.
Diffstat (limited to 'R')
-rw-r--r--R/pkg/R/utils.R11
-rw-r--r--R/pkg/inst/tests/testthat/test_Windows.R2
2 files changed, 9 insertions, 4 deletions
diff --git a/R/pkg/R/utils.R b/R/pkg/R/utils.R
index 74b3e502eb..1f7848f2b4 100644
--- a/R/pkg/R/utils.R
+++ b/R/pkg/R/utils.R
@@ -756,12 +756,17 @@ varargsToJProperties <- function(...) {
props
}
-launchScript <- function(script, combinedArgs, capture = FALSE) {
+launchScript <- function(script, combinedArgs, wait = FALSE) {
if (.Platform$OS.type == "windows") {
scriptWithArgs <- paste(script, combinedArgs, sep = " ")
- shell(scriptWithArgs, translate = TRUE, wait = capture, intern = capture) # nolint
+ # on Windows, intern = F seems to mean output to the console. (documentation on this is missing)
+ shell(scriptWithArgs, translate = TRUE, wait = wait, intern = wait) # nolint
} else {
- system2(script, combinedArgs, wait = capture, stdout = capture)
+ # http://stat.ethz.ch/R-manual/R-devel/library/base/html/system2.html
+ # stdout = F means discard output
+ # stdout = "" means to its console (default)
+ # Note that the console of this child process might not be the same as the running R process.
+ system2(script, combinedArgs, stdout = "", wait = wait)
}
}
diff --git a/R/pkg/inst/tests/testthat/test_Windows.R b/R/pkg/inst/tests/testthat/test_Windows.R
index 8813e18a1f..e8d983426a 100644
--- a/R/pkg/inst/tests/testthat/test_Windows.R
+++ b/R/pkg/inst/tests/testthat/test_Windows.R
@@ -20,7 +20,7 @@ test_that("sparkJars tag in SparkContext", {
if (.Platform$OS.type != "windows") {
skip("This test is only for Windows, skipped")
}
- testOutput <- launchScript("ECHO", "a/b/c", capture = TRUE)
+ testOutput <- launchScript("ECHO", "a/b/c", wait = TRUE)
abcPath <- testOutput[1]
expect_equal(abcPath, "a\\b\\c")
})