回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试图找出猪关系中两个不同时间域之间的区别。我可以使用pig的todate()方法,但它应该是hhmm格式。但是,它没有前导零。例如,如果这两个字段的值分别为1245和1425,我可以通过使用todate转换它们来找到差异。但是,如果值是945和823,则无法使用todate进行转换,因为没有前导零。你知道吗</p>
<p>不过,我编写了一个python udf,试图左填充一个0。请在下面找到代码</p>
<pre><code> @outputSchema("time:bytearray")
def zero(time):
time = str(time)
if len(time)<= 3:
return '0'+ time
else:
return time
</code></pre>
<p>步骤1:注册python函数</p>
<pre><code>REGISTER '/home/Jig13517/zeropad.py' using jython AS myfuncs ;
</code></pre>
<p>请找到下面的关系</p>
<pre><code>Airlines_data_schema = LOAD '/user/Jig13517/pigsample/Airlines_data.csv' USING PigStorage('\t') AS (Year,Month,DayofMonth,DayofWeek,DepTime_actual,CRSDeptime,Arrtime_actual,CRSArrtime,UniqueCarrier,FlightNum,TailNum_Plane,ActualElapsedTime,CRSElapsedTime,Airtime,Arrdelay,Depdelay,Origin,Dest,Distance,Taxiin,Taxiout,Cancelled,CancellationCode,Diverted,CarrierDelay,WeatherDelay,NASDelay,SecurityDelay,LateAircraftDelay);
</code></pre>
<p>=============================================</p>
<p>然后我试着用零填充列值</p>
<pre><code>airlines_new = FOREACH Airlines_data_schema GENERATE Year,Month,DayofMonth,DayofWeek,myfuncs.zero($4) AS DepTime_actual_new,myfuncs.zero($5) AS CRSDeptime_new,myfuncs.zero($6) AS Arrtime_actual_new,myfuncs.zero($7) AS CRSArrtime_new,UniqueCarrier,FlightNum,TailNum_Plane,ActualElapsedTime,CRSElapsedTime,Airtime,Arrdelay,Depdelay,Origin,Dest,Distance,Taxiin,Taxiout,Cancelled,CancellationCode,Diverted,CarrierDelay,WeatherDelay,NASDelay,SecurityDelay,LateAircraftDelay ;
</code></pre>
<p>=======================================</p>
<p>应用python自定义项后的示例数据</p>
<pre><code> (2008,1,3,4,617,615,652,650,WN,11,N689SW,95,95,70,2,2,IND,MCI,451,6,19,0,,0,NA,NA,NA,NA,NA,,,,None,None,None,None,,,,,,,,,,,,,,,,,,,,,)
</code></pre>
<p>但我们可以看到上面它没有转换列值。我得到相同的领域不变。请让我知道我的自定义项有什么问题,或者有没有什么pig方法来完成这个任务。你知道吗</p>