Оболочка Spark: как скопировать многострочность внутри?

У меня есть программа Scala, которую я хочу выполнить с помощью оболочки Spark, теперь, когда я копирую вставку в оболочку Spark, она не работает, мне приходится копировать строку за строкой внутри.

Как мне скопировать всю программу внутри оболочки?

Спасибо.


person hawarden_    schedule 19.09.2019    source источник


Ответы (4)


просто сохраните свой код в текстовый файл и используйте :load <path_to_your_script> в искровой оболочке

person chlebek    schedule 19.09.2019
comment
Я обнаружил, что мне нужно поместить свой код в скобки, как сказал Крейг stackoverflow.com/a/59440041/524588, даже если он находится в файл. - person Sanghyun Lee; 13.01.2021

В 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]
person timothyzhang    schedule 19.09.2019
comment
Это спасает положение. Спасибо! - person Eric; 29.12.2020
comment
это должен быть принятый ответ, так как он проще и работает. - person Vichoko; 05.06.2021

В оболочке Spark вы можете заключить многострочный код Spark в круглые скобки для выполнения кода. Заключение в круглые скобки позволит вам скопировать многострочный код Spark в оболочку или написать многострочный код построчно. См. Примеры использования ниже.

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)
 | )
person Craig Covey    schedule 21.12.2019

Мне нужно от вас больше объяснений. Но я предполагаю, что вы пытаетесь сделать что-то вроде этого:

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

И это не работает. Вместо этого вы можете:

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

Поставьте точку в конце линии.

Надеюсь, это то, что вы ищете.

person Nastasia    schedule 19.09.2019