【问题标题】:Slice Spark’s DataFrame SQL by row (pyspark)按行切片 Spark 的 DataFrame SQL (pyspark)
【发布时间】:2017-01-15 18:16:48
【问题描述】:

我有一个 Spark 的 Dataframe parquet 文件,可以被 spark 读取,如下所示

df = sqlContext.read.parquet('path_to/example.parquet')
df.registerTempTable('temp_table')

我想按行对我的数据帧df 进行切片(即相当于 Pandas 数据帧中的 df.iloc[0:4000], df.iloc[4000:8000] 等),因为我想将每个小块转换为 pandas 数据帧以供以后处理。我只知道如何使用sample 随机分数,即

df_sample = df.sample(False, fraction=0.1) # sample 10 % of my data
df_pandas = df_sample.toPandas()

如果有一种方法可以按行分割我的数据框df,那我会很棒。提前致谢。

【问题讨论】:

    标签: sql pyspark pyspark-sql


    【解决方案1】:

    您可以使用 monotonically_increasing_id() 将 ID 列添加到您的数据框中,并使用它来获取任意大小的工作集。

    import pyspark.sql.functions as f
    
    # add an index column
    df = df.withColumn('id', f.monotonically_increasing_id())
    
    # Sort by index and get first 4000 rows
    working_set = df.sort('id').limit(4000)
    

    然后,您可以使用 subtract() 从数据框中删除工作集。

    # Remove the working set, and use this `df` to get the next working set
    df = df.subtract(working_set)
    

    冲洗并重复,直到处理完所有行。不是理想的做事方式,但它确实有效。考虑过滤掉要在 Pandas 中使用的 Spark 数据框。

    【讨论】:

      猜你喜欢
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 2020-08-10
      • 2017-05-08
      • 2022-08-19
      • 2021-01-01
      相关资源
      最近更新 更多