Как сделать пакеты доступными для Scala REPL? - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь познакомиться со Scala.Я использую macOS.

Я установил scala, используя brew install scala, что без проблем, и после завершения я могу запустить scala REPL, просто набрав scala, и я на приглашение scala>.
Теперь я хочу импортировать некоторые пакеты, поэтому я пытаюсь:

import org.apache.spark.sql.Column

, и неудивительно, что это приводит к ошибке

: объект apache не является членом пакета org

Это имеет смысл, как он узнает, откуда взять этот пакет?Дело в том, что я не знаю, что мне нужно сделать, чтобы сделать этот пакет доступным.Могу ли я что-нибудь сделать из командной строки, что позволило бы мне import org.apache.spark.sql.Column?

Я немного погуглил, но не нашел ничего, что объясняет без жаргона.Завершите Scala Noob здесь, так что ответы без жаргона будут оценены.

Ответы [ 5 ]

0 голосов
/ 19 июля 2019

Я сделал следующее в Windows:

for /f "tokens=*" %%a in ('java -jar coursier fetch -p "com.lihaoyi::requests:0.2.0" "com.lihaoyi::upickle:0.7.5"') do set SCP=%%a

scala -nc -classpath %SCP% %1 %2 %3

Вместо двух перечисленных здесь библиотек вы можете использовать неограниченное количество других необходимых вам библиотек. Они должны быть доступны в Maven Central, хотя. %1 может быть скриптом scala (расширение ".sc"). Но вы можете оставить его пустым, и REPL начнется с библиотек на пути к классам.

0 голосов
/ 08 мая 2018

Вот два способа запустить REPL с известными мне зависимостями:

  1. Используйте SBT для управления зависимостями, используйте console, чтобы запустить REPL с этими зависимостями
  2. Используйте аммонит REPL

Вы можете создать отдельный каталог с build.sbt, в котором вы установите

scalaVersion := "2.11.12"

, а затем скопируйте

libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.3.0"

фрагменты из MavenCentral. Затем вы можете запустить REPL с sbt console. Обратите внимание, что это создаст подкаталоги project и target, поэтому он "оставляет следы", вы не можете использовать его как отдельный scala -repl. Вы также можете опустить build.sbt и добавить библиотечные зависимости, напечатав их в самой SBT-оболочке.

В качестве альтернативы вы можете просто использовать Аммонит REPL , который был создан именно для этой цели.

0 голосов
/ 08 мая 2018

Вы можете использовать classpath, чтобы сделать библиотеку доступной, то есть загрузить файл jar локально и использовать команду следующим образом (здесь я использую Apache IO lib для перемещения файлов из scala приглашения)

C0:Desktop pvangala$ scala -cp /Users/pvangala/Downloads/commons-io-2.6/commons-io-2.6.jar
Welcome to Scala 2.12.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_161).
Type in expressions for evaluation. Or try :help.

scala> import java.io.File
import java.io.File

scala> val src = new File("/Users/pvangala/Downloads/commons-io-2.6-bin.tar")
src: java.io.File = /Users/pvangala/Downloads/commons-io-2.6-bin.tar

scala> val dst =  new File("/Users/pvangala/Desktop")
dst: java.io.File = /Users/pvangala/Desktop

scala> org.apache.commons.io.FileUtils.moveFileToDirectory(src, dst, true)
0 голосов
/ 08 мая 2018

Если вы хотите использовать spark, вы должны использовать spark-shell вместо scala REPL. Он имеет почти такое же поведение, но по умолчанию включает все искровые зависимости.

Вы должны скачать бинарные файлы из здесь

Тогда, если вы используете Linux , вы должны создать переменную SPARK_HOME, указывающую на загруженную папку, и включить ее папку bin в PATH.

затем вы можете запустить его в любой консоли с помощью команды spark-shell

В Windows Я не уверен, но я думаю, что у вас должен быть файл spark-shell.cmd или что-то подобное, что вы можете использовать для запуска spark-shell,

0 голосов
/ 08 мая 2018

Если вы хотите использовать искры, я бы порекомендовал вам использовать спарк-оболочку, которая поставляется вместе с искрой. Я не знаю macOS, поэтому не могу помочь вам с установкой Spark.

Для обычного Scala я рекомендую аммонит http://ammonite.io/#Ammonite-REPL, включающий синтаксис, позволяющий извлекать пакеты / зависимости.

...