Scala Spark-非法开始定义

时间:2018-07-10 17:03:27

标签: scala apache-spark jupyter-notebook

这可能是一个愚蠢的新手错误,但是运行我认为是基本的Scala代码(在Spark笔记本中,通过Jupyter笔记本)时出现错误:

val sampleDF = spark.read.parquet("/data/my_data.parquet")

sampleDF
  .limit(5)
  .write
  .format("jdbc")
  .option("url", "jdbc:sqlserver://sql.example.com;database=my_database")
  .option("dbtable", "my_schema.test_table")
  .option("user", "foo")
  .option("password", "bar")
  .save()

错误:

<console>:1: error: illegal start of definition
    .limit(5)
    ^

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

对jupyter内部没有任何了解,但我怀疑这是jupyter-repl交互作用中的产物。出于某种原因,sampleDF本身就是完整的陈述。试试

(sampleDF
  .limit(5)
  .write
  .format("jdbc")
  .option("url", "jdbc:sqlserver://sql.example.com;database=my_database")
  .option("dbtable", "my_schema.test_table")
  .option("user", "foo")
  .option("password", "bar")
  .save())

答案 1 :(得分:0)

Jupyter会尝试将每一行解释为一个完整的命令,因此sampleDF首先被解释为有效的表达式,然后将其移至下一行,从而产生错误。将点移到上一行,以使口译员知道“还有更多东西要来”:

sampleDF.
  limit(5).
  write.
  format("jdbc").
  option("url", "jdbc:sqlserver://sql.example.com;database=my_database").
  option("dbtable", "my_schema.test_table").
  option("user", "foo").
  option("password", "bar").
  save()