Gav*_*vin 3 apache-spark apache-spark-sql pyspark
在 python 或 R 中,有一些方法可以使用索引对 DataFrame 进行切片。
例如,在熊猫中:
df.iloc[5:10,:]
Run Code Online (Sandbox Code Playgroud)
pyspark 中是否有类似的方法可以根据行的位置对数据进行切片?
简答
如果您已经有一个索引列(假设它被调用'id'
),您可以使用pyspark.sql.Column.between
以下方法进行过滤:
from pyspark.sql.functions import col
df.where(col("id").between(5, 10))
Run Code Online (Sandbox Code Playgroud)
如果您还没有索引列,您可以自己添加一个,然后使用上面的代码。您应该根据其他一些列 ( orderBy("someColumn")
)在数据中内置一些排序。
完整说明
不,除非索引已经作为列存在,否则很难按索引对 Spark DataFrame 进行切片。
Spark DataFrame 本质上是无序的,不支持随机访问。(没有像pandas那样的内置索引的概念)。每行都被视为结构化数据的独立集合,这就是分布式并行处理的原因。因此,任何执行器都可以获取任何数据块并对其进行处理,而无需考虑行的顺序。
现在很明显它是可以执行的操作做涉及排序(lead
,lag
,等),但因为它需要火花洗牌执行人之间的数据,这些会比较慢。(数据的混洗通常是 Spark 作业中最慢的组件之一。)
相关/进一步阅读
归档时间: |
|
查看次数: |
12004 次 |
最近记录: |