Spark shell:如何在里面复制多行?

Spark shell : How to copy multiline inside?

我有一个 Scala 程序,我想使用 Spark shell 执行,现在当我将粘贴复制到 spark shell 时它不起作用,我必须在里面逐行复制。

我应该如何复制shell里面的所有程序?

谢谢。

只需将您的代码保存到文本文件并在 spark-shell

中使用 :load <path_to_your_script>

我需要你的更多解释。但我猜你正在尝试做类似的事情:

spark.read.parquet(X)
.filter("ll")
.groupBy("iii")
.agg("kkk")

而且它不起作用。 相反,你可以这样做:

spark.read.parquet(X).
    filter("ll").
    groupBy("iii").
    agg("kkk")

把点放在行尾。

希望这就是您要找的。

在spark-shell中,你只需要使用命令“:paste”

scala> :paste
// Entering paste mode (ctrl-D to finish)

val empsalary = Seq(
  Salary("sales", 1, 5000),
  Salary("personnel", 2, 3900),
  Salary("sales", 3, 4800),
  Salary("sales", 4, 4800),
  Salary("personnel", 5, 3500),
  Salary("develop", 7, 4200),
  Salary("develop", 8, 6000),
  Salary("develop", 9, 4500),
  Salary("develop", 10, 5200),
  Salary("develop", 11, 5200))
.toDS.toDF

然后使用ctrl-D退出此模式。可以看到输出:

// Exiting paste mode, now interpreting.

empsalary: org.apache.spark.sql.DataFrame = [depName: string, empNo: bigint ... 1 more field]

在 Spark shell 中,您可以将多行 Spark 代码包裹在括号中以执行代码。括在括号中将允许您将多行 Spark 代码复制到 shell 或逐行编写多行代码。请参阅下面的示例以了解用法。

scala> val adult_cat_df = (spark.read.format("csv")
 |   .option("sep", ",")
 |   .option("inferSchema", "true")
 |   .option("header", "false")
 |   .load("hdfs://…/adult/adult_data.csv")
 |   .toDF("age", "workclass", "fnlwgt", "education", "education-num", "marital-status", "occupation", "relationship", "race", "sex", "capital-gain", "capital-loss", "hours-per-week", "native-country", "class")
 |   .drop("fnlwgt", "education-num", "capital-gain", "capital-loss")
 | )
scala> val clean_df = (adult_cat_df.dropDuplicates
 |   .na.replace("*", Map("?" -> null))
 |   .na.drop(minNonNulls = 9)
 | )