value选项不是org.apache.spark.sql.dataframe的成员

bweufnob  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(873)

我尝试在scala中创建一个Dataframe,如下所示:

var olympics =spark.read.csv("/FileStore/tables/Soccer_Data_Set_c46d1.txt").option("inferSchema","true").option("header","true").option("delimiter",",")

当我提交代码时 value option is not a member of org.apache.spark.sql.DataFrame 错误。
但是,当我修改代码如下:

var olympics = spark.read.option("inferSchema","true").option("header","true").option("delimiter",",").csv("/FileStore/tables/Soccer_Data_Set_-c46d1.txt")

已成功创建Dataframe。
有人能帮我理解这两段代码的区别吗?

hi3rlvi2

hi3rlvi21#

在第一组代码中:调用'read.csv(“/filestore/tables/soccer\u data\u set\u c46d1.txt”)'方法时,您将得到'org.apache.spark.sql.dataset'对象作为返回值。此类不定义您稍后尝试调用的任何“option()”方法('csv(..).option(“inferschema”,“true”))。因此,编译器限制您并抛出错误。
请参阅:dataset类api,其中找不到“option()”方法的定义
在第二组代码中:调用'spark.read'方法时,您将得到'org.apache.spark.sql.dataframereader'对象作为返回值。这个类已经定义了一些重载的'option'方法,当您使用其中一个有效方法时,您不会从编译器得到任何错误。
请参阅dataframereader类api,您可以在其中找到已定义的“option()”的重载方法。

rekjcdws

rekjcdws2#

你打过电话之后 csv 方法,您已经有了一个dataframe,并且数据已经被“读入”spark,所以在那里设置选项是没有意义的。
在第二个例子中,您正在呼叫 read 要“说”您希望spark读取一个文件,请设置这种读取的属性,然后实际读取该文件。

相关问题