Spark DataFrame中类似于Pandas DataFrame的`.iloc()`方法的等效方法是什么?

12

有没有一种方法可以使用整数按位置引用Spark DataFrame列?

类似的Pandas DataFrame操作:

df.iloc[:0] # Give me all the rows at column position 0 
4个回答

10

Python中的df.iloc相当于collect。

PySpark示例:

X = df.collect()[0]['age'] 
或者
X = df.collect()[0][1]  #row 0 col 1

collect() 在大型数据框上会很快导致内存错误,因为它检索数据集的所有元素(从所有节点)到驱动程序节点,因此只应在小型数据集上使用。 - Claytronicon
对于想知道在collect()之外该使用什么的人,可以使用take() - Gabriel Fair
但是 take() 返回一个列表作为结果,而在 Pandas 中使用 iloc 可以得到一个数据框。 - Emil Haas

7
不是很确切,但你可以尝试类似这样的方法: Python:
df = sc.parallelize([(1, "foo", 2.0)]).toDF()
df.select(*df.columns[:1])  # I assume [:1] is what you really want
## DataFrame[_1: bigint]

或者
df.select(df.columns[1:3])
## DataFrame[_2: string, _3: double]

Scala

val df = sc.parallelize(Seq((1, "foo", 2.0))).toDF()
df.select(df.columns.slice(0, 1).map(col(_)): _*)

注意:

Spark SQL不支持行索引,而且它很可能永远不会支持行索引,因此不可能在行维度上进行索引。


0
在Databricks上的Spark 3.1.1中,只需选择感兴趣的列并应用限制即可。
%python
retDF = (inputDF
    .select(col(inputDF
        .columns[0]))
    .limit(100)
)

0

你可以在spark-shell中像这样使用。

scala>: df.columns  
Array[String] = Array(age, name)

scala>: df.select(df.columns(0)).show()
+----+
| age|
+----+
|null|
|  30|
|  19|
+----+

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接