我正在尝试在scala中创建数据框,如下所示:
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")
已成功创建奥运会数据帧。
有人可以帮我理解这两个代码片段之间的区别吗?
调用csv
方法后,你已经有一个数据帧,并且数据已经"读入"火花,因此在那里设置选项没有意义。
在第二个示例中,你调用read
来"说"你希望 Spark 读取文件,设置此类读取的属性,然后实际读取文件。
在第一组代码中:在调用"读取"时。csv("/FileStore/tables/Soccer_Data_Set_c46d1.txt"(' 方法,您将获得"org.apache.spark.sql.Dataset"对象作为返回值。此类不定义您稍后尝试调用的任何"选项(("方法('csv(..(。选项("推断模式", "true"('(。因此,编译器正在限制您并引发错误。
请参考:数据集类API,其中找不到"option(("方法的定义
在第二组代码中:关于调用'spark。read"方法,你将获得'org.apache.spark.sql.DataFrameReader'对象作为返回值。此类已经定义了一些重载的"选项"方法,并且由于您使用的是有效方法之一,因此不会从编译器收到任何错误。
请参考 DataFrameReader 类 API,您可以在其中找到已定义的 'option((' 的重载方法。