簡體   English   中英

如何在Python中將[String,String]類型的RDD轉換為[Int,Int]類型的RDD?

[英]How can I convert an RDD of type [String, String] to RDD of type [Int,Int] in Python?

所有類似問題的現有答案都在Scala中,但我使用的是python。

具體來說,我正在嘗試將['1,-1', '2,-2'][[1,-1],[2,-2]]

myrdd.map(lambda x: x.split(',')).map(lambda x: int(x[0]),int(x[1]))給我錯誤。

編輯:我正在使用RDD。 該示例是為了說明RDD的內容。

您可能已經在此處發布了錯誤消息。 我相信是

NameError:未定義名稱“ x”

這來自第二個lambda中的語法錯誤。 您必須返回列表或教堂:

myrdd.map(lambda x: x.split(',')).map(lambda x: [int(x[0]),int(x[1])])

嘗試這個:

lista=['1,-1', '2,-2'] 

final_list=[ [int(i[:i.find(',')]), int(i[i.find(',')+1:])] for i in lista ]
            #add the first integer  #add the second integer #, both inside a list, for every item in lista 
print(final_list)

輸出:

[[1, -1], [2, -2]]

編輯:顯然,此解決方案僅適用於列表,但這是我目前所知道的。

通過split解析數據中的每個元素,並應用lambda強制轉換為int

data = ['1,-1', '2,-2']
result = [map(lambda i: int(i), element.split(",")) for element in data]
#[[1, -1], [2, -2]]

編輯:

data = RDDstuff
result = [data.flatMapmap(lambda i: int(i), element.split(",")))]

您的錯誤來自以下事實:在上一個map ,您沒有在lambda函數中返回元組。 相反, int(x[1])充當map方法的第二個參數。 這就是為什么出現NameError: name 'x' is not defined

myrdd = sc.parallelize(['1,-1', '2,-2'])
myrdd2 = myrdd.map(lambda x: x.split(','))
myrdd3 = myrdd2.map(lambda x: [int(x[0]), int(x[1])])
print(myrdd3.take(2))

[[1, -1], [2, -2]]

暫無
暫無

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

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