簡體   English   中英

使用pySpark迭代數據幀的每一行

[英]Iterating each row of Data Frame using pySpark

我需要使用pySpark遍歷dataframe ,就像我們可以使用for循環迭代一組值一樣。 以下是我編寫的代碼。 這段代碼的問題是

  1. 我必須使用collect打破並行性
  2. 我無法從數據框的功能打印任何值funcRowIter
  3. 找到匹配項后就無法中斷循環。

我必須在pySpark中這樣做,並且不能為此使用熊貓:

from pyspark.sql.functions import *
from pyspark.sql import HiveContext
from pyspark.sql import functions
from pyspark.sql import DataFrameWriter
from pyspark.sql.readwriter import DataFrameWriter
from pyspark import SparkContext

sc = SparkContext()
hive_context = HiveContext(sc)

tab = hive_context.sql("select * from update_poc.test_table_a")

tab.registerTempTable("tab")
print type(tab)

df = tab.rdd

def funcRowIter(rows):
    print type(rows)
        if(rows.id == "1"):
            return 1

df_1 = df.map(funcRowIter).collect()
print df_1

似乎您的目標是顯示特定的行。 您可以使用.filter然后使用.collect

例如,

row_1 = rdd.filter(lambda x: x.id==1).collect()

但是,以這種方式嘗試遍歷您的數據框並不是有效的方法。

而不是使用df_1 = df.map(funcRowIter).collect() ,應嘗試使用UDF。 希望這會有所幫助。

from pyspark.sql.functions import struct
from pyspark.sql.functions import *
def funcRowIter(rows):
    print type(rows)
    if(row is nor None and row.id is not None)
        if(rows.id == "1"):
            return 1
A = udf(funcRowIter, ArrayType(StringType()))
z = df.withColumn(data_id, A(struct([df[x] for x in df.columns])))
z.show()

對於大數據(即數百萬條記錄collect()將永遠不是一個好的選擇

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM