4

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

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

谢谢。

4

4 回答 4

16

在 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]
于 2019-09-19T17:40:52.900 回答
5

在 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)
 | )
于 2019-12-21T21:43:20.480 回答
4

只需将您的代码保存到文本文件并:load <path_to_your_script>在 spark-shell 中使用

于 2019-09-19T10:59:45.233 回答
3

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

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

它不起作用。相反,您可以这样做:

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

将点放在行尾。

我希望这是你正在寻找的。

于 2019-09-19T13:23:04.970 回答