在 Pig 中将关系传递给 Python UDF 时出错
Error Passing Relation to Python UDF in Pig
我正在尝试将关系传递给 Pig 中的 Python UDF。但它给我一个错误。以下是我的 Pig Latin 脚本,Python 脚本和错误日志,
REGISTER '/home/cloudera/jython-installer-2.7.0.jar';
REGISTER '/home/cloudera/Code.py' USING jython as myfunc;
A = LOAD '/home/cloudera/Link.txt' as (line:chararray);
B = FOREACH A GENERATE myfunc.codefunc(line);
//Python 脚本
import pandas as pd
def count(A, crime):
with open(A, 'r', encoding='UTF8') as fileA:
data = fileA.read().lower()
count = data.count(crime.lower())
return count
def codefunc(A):
crime = ['Rape', 'Murder', 'Extortion', 'Felony', 'Burglary', 'Property Damage', 'Arrest', 'Political Unrest', 'Civil Unrest', 'Solitication', 'Larceny', 'Abettor', 'Trafficking', 'Tresspasser', 'Robbery']
crimecount = {}
for i in range(len(crime)):
crimecount[crime[i]] = count(A, crime[i])
final_count = pd.DataFrame(list(crimecount.items()), columns = ['Crime', 'Value'])
final_count['Percentage'] = 0
total_count = final_count['Values'].sum()
for i in range(0, final_count.last_valid_index()+1):
final_count['Percentage'][i] = float((final_count['Values'][i]/total_count)*100.0)
final_count.sort_values(by=['Percentage'], ascending=False)
final_count.to_csv('/home/cloudera/solution.csv', header=0)
//错误日志
Link of Error Log
我已将 link 放置在数据集所在的位置,并将 link 从 Pig 传递给 Python。 Python 应该去那个 link 并读取数据集并执行编写的代码。 Python 代码绝对没问题。我对此很有信心。但是 Pig 在关系 'B' 上向我抛出一个错误。我尝试将错误代码放在这里,但 Stack Overflow 不允许我这样做,所以我放了 link。很抱歉给您带来不便。谁能帮帮我吗。提前致谢。
你的代码绝对没问题。问题出在 Jython 上。 Jython 不支持 Pandas 数据帧,因为它是用 C/C++ 编写的。加油!
希望你喜欢我的回答! Yippee!!
我正在尝试将关系传递给 Pig 中的 Python UDF。但它给我一个错误。以下是我的 Pig Latin 脚本,Python 脚本和错误日志,
REGISTER '/home/cloudera/jython-installer-2.7.0.jar';
REGISTER '/home/cloudera/Code.py' USING jython as myfunc;
A = LOAD '/home/cloudera/Link.txt' as (line:chararray);
B = FOREACH A GENERATE myfunc.codefunc(line);
//Python 脚本
import pandas as pd
def count(A, crime):
with open(A, 'r', encoding='UTF8') as fileA:
data = fileA.read().lower()
count = data.count(crime.lower())
return count
def codefunc(A):
crime = ['Rape', 'Murder', 'Extortion', 'Felony', 'Burglary', 'Property Damage', 'Arrest', 'Political Unrest', 'Civil Unrest', 'Solitication', 'Larceny', 'Abettor', 'Trafficking', 'Tresspasser', 'Robbery']
crimecount = {}
for i in range(len(crime)):
crimecount[crime[i]] = count(A, crime[i])
final_count = pd.DataFrame(list(crimecount.items()), columns = ['Crime', 'Value'])
final_count['Percentage'] = 0
total_count = final_count['Values'].sum()
for i in range(0, final_count.last_valid_index()+1):
final_count['Percentage'][i] = float((final_count['Values'][i]/total_count)*100.0)
final_count.sort_values(by=['Percentage'], ascending=False)
final_count.to_csv('/home/cloudera/solution.csv', header=0)
//错误日志 Link of Error Log
我已将 link 放置在数据集所在的位置,并将 link 从 Pig 传递给 Python。 Python 应该去那个 link 并读取数据集并执行编写的代码。 Python 代码绝对没问题。我对此很有信心。但是 Pig 在关系 'B' 上向我抛出一个错误。我尝试将错误代码放在这里,但 Stack Overflow 不允许我这样做,所以我放了 link。很抱歉给您带来不便。谁能帮帮我吗。提前致谢。
你的代码绝对没问题。问题出在 Jython 上。 Jython 不支持 Pandas 数据帧,因为它是用 C/C++ 编写的。加油!
希望你喜欢我的回答! Yippee!!