我尝试在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。
有人能帮我理解这两段代码的区别吗?
2条答案
按热度按时间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()”的重载方法。
rekjcdws2#
你打过电话之后
csv
方法,您已经有了一个dataframe,并且数据已经被“读入”spark,所以在那里设置选项是没有意义的。在第二个例子中,您正在呼叫
read
要“说”您希望spark读取一个文件,请设置这种读取的属性,然后实际读取该文件。