我知道我可以提取这样的列:
userData1.select(userData1("job"))
但是,如果我已经有一个列或列数组,如何从中获取数据帧呢?到目前为止对我有用的是:
userData1.select(userData1("id"), userData1("age"))
与你在R中所做的相比,这有点冗长和丑陋:
userData1[, c("id", "age")]
行怎么样?例如:
userData1.head(5)
如何将其转换为新的数据框?
答案 0 :(得分:1)
要选择多个列,您可以使用varargs语法:
import org.apache.spark.sql.DataFrame
val df: DataFrame = sc.parallelize(Seq(
(1, "x", 2.0), (2, "y", 3.0), (3, "z", 4.0)
)).toDF("foo", "bar", "baz")
// or df.select(Seq("foo", "baz") map col: _*)
val fooAndBaz: DataFrame = df.select(Seq($"foo", $"baz"): _*)
fooAndBaz.show
// +---+---+
// |foo|baz|
// +---+---+
// | 1|2.0|
// | 2|3.0|
// | 3|4.0|
// +---+---+
PySpark等价物是参数解包:
df = sqlContext.createDataFrame(
[(1, "x", 2.0), (2, "y", 3.0), (3, "z", 4.0)],
("foo", "bar", "baz"))
df.select(*["foo", "baz"]).show()
## +---+---+
## |foo|baz|
## +---+---+
## | 1|2.0|
## | 2|3.0|
## | 3|4.0|
## +---+---+
要限制行数而不收集,可以使用限制方法:
val firstTwo: DataFrame = df.limit(2)
firstTwo.show
// +---+---+---+
// |foo|bar|baz|
// +---+---+---+
// | 1| x|2.0|
// | 2| y|3.0|
// +---+---+---+
等同于SQL LIMIT
子句:
df.registerTempTable("df")
sqlContext.sql("SELECT * FROM df LIMIT 2").show
// +---+---+---+
// |foo|bar|baz|
// +---+---+---+
// | 1| x|2.0|
// | 2| y|3.0|
// +---+---+---+