[英]Iterating each row of Data Frame using pySpark
我需要使用pySpark遍歷dataframe
,就像我們可以使用for循環迭代一組值一樣。 以下是我編寫的代碼。 這段代碼的問題是
funcRowIter
我必須在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.