为什么我需要在spark_read_csv()中指定一个名称并将其分配给一个对象?

时间:2017-08-07 12:19:00

标签: r apache-spark dry sparklyr

如果我理解了正确的用法(如果没有请纠正我),sparklyr::spark_read_csv()应该像这样使用:

my_table <- spark_read_csv(sc = my_connnection, 
name = "my_table", 
path = "path/to/my/data")

在我看来(我认为是错误的)违反DRY。我将对象命名两次,一次是在函数输出的赋值中,一次是在name的提供参数中,它没有默认值,并且是“要分配给新生成的表的名称。” / p>

为什么我将该功能的输出命名为两次?是否有一个'spark'对象在幕后获取函数的name参数?是否有理由以不同的方式命名它们,或者相同?

1 个答案:

答案 0 :(得分:1)

您不必将其分配给对象。您只需按名称访问它:

dplyr::tbl(sc, "some_name")

sc %>% spark_session() %>% invoke("sql", "SELECT * FROM my_table")

但总的来说,这是一个设计问题。 sparklyr + dplyr组合将Spark视为数据库。当您致电spark_read_csv时,会在name下创建一个可供dplyr后端使用的临时表,

除非您按名称计划,否则您可以使用随机字符串(以避免名称冲突)。