这可能是一个愚蠢的新手错误,但是运行我认为是基本的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)
^
我在做什么错了?
答案 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()