我有一个想使用 Spark shell 执行的 Scala 程序,现在当我将粘贴复制到 Spark shell 中时它不起作用,我必须在里面逐行复制。
我应该如何复制外壳内的所有程序?
谢谢。
在 Spark-shell 中,你只需要使用命令 ":p aste">
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)
| )
我需要你更多的解释。但我想你正在尝试做这样的事情:
spark.read.parquet(X)
.filter("ll")
.groupBy("iii")
.agg("kkk")
而且它不起作用。 相反,您可以执行以下操作:
spark.read.parquet(X).
filter("ll").
groupBy("iii").
agg("kkk")
将点放在行尾。
我希望这是你要找的。
只需将代码保存到文本文件并在Spark-shell中使用:load <path_to_your_script>