gpt4 book ai didi

python - 将键/值对的 Pyspark RDD 解析为 .csv 格式

转载 作者:太空宇宙 更新时间:2023-11-03 14:57:00 25 4
gpt4 key购买 nike

我正在构建一个解析器,它接受“key”=“value”对的原始文本文件,并使用 PySpark 写入表格/.csv 结构。

我遇到的问题是,我可以在函数中访问它们的键和值来构造每个csv_row,甚至检查这些键是否等于预期键的列表(col_list) code>),但当我在 lambda 中调用该函数 processCsv 时,我不知道如何将每个 csv_row 附加到列表的全局列表 l_of_l 用于保存 .csv 行的最终列表。

如何以键/值格式迭代 RDD 的每条记录并解析为 .csv 格式?正如您所看到的,我的最终列表列表 (l_of_l) 是空的,但我可以获取循环内的每一行...令人沮丧。

感谢所有建议!

原始文本结构(foo.log):

"A"="foo","B"="bar","C"="baz"
"A"="oof","B"="rab","C"="zab"
"A"="aaa","B"="bbb","C"="zzz"

到目前为止的方法:

from pyspark import SparkContext
from pyspark import SQLContext
from pyspark.sql import Row

sc=SparkContext('local','foobar')
sql = SQLContext(sc)

# Read raw text to RDD
lines=sc.textFile('foo.log')
records=lines.map(lambda x: x.replace('"', '').split(","))

print 'Records pre-transform:\n'
print records.take(100)
print '------------------------------\n'

def processRecord(record, col_list):
csv_row=[]
for idx, val in enumerate(record):
key, value = val.split('=')
if(key==col_list[idx]):
# print 'Col name match'
# print value
csv_row.append(value)
else:
csv_row.append(None)
print 'Key-to-Column Mismatch, dropping value.'
print csv_row
global l_of_l
l_of_l.append(csv_row)

l_of_l=[]
colList=['A', 'B', 'C']
records.foreach(lambda x: processRecord(x, col_list=colList))

print 'Final list of lists:\n'
print l_of_l

输出:

Records pre-transform:
[[u'A=foo', u'B=bar', u'C=baz'], [u'A=oof', u'B=rab', u'C=zab'], [u'A=aaa', u'B=bbb', u'C=zzz']]
------------------------------

[u'foo', u'bar', u'baz']
[u'oof', u'rab', u'zab']
[u'aaa', u'bbb', u'zzz']

Final list of lists:
[]

最佳答案

试试这个功能:

def processRecord(record, col_list):    
csv_row=list()
for idx, val in enumerate(record):
key, value = val.split('=')
if(key==col_list[idx]):
# print 'Col name match'
# print value
csv_row.append(value)
else:
csv_row.append(None)
# print 'Key-to-Column Mismatch, dropping value.'
return csv_row

然后

colList=['A', 'B', 'C']
l_of_l = records.map(lambda x: processRecord(x, col_list=colList)).collect()

print 'Final list of lists:\n'
print l_of_l

应该给

Final list of lists: 
[[u'foo', u'bar', u'baz'], [u'oof', u'rab', u'zab'], [u'aaa', u'bbb', u'zzz']]

关于python - 将键/值对的 Pyspark RDD 解析为 .csv 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45465322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com