2016-08-02 15 views
0

私の目標は、鳩スクリプトで鳩を使って空間機能を使用することです。ピジョン関数を使用するには、冒頭に3つのJAR(pigeon-0.2.1.jar、esri-geometry-api-1.2.1.jar、jts-1.8.jar)を登録します。このJARはエラーや警告なしで実行されます。 私は、豚のコマンドライン(grunt)で豚コマンドを実行すると、すべての問題は解決しますが(一部の除外警告は除きますが、他の投稿を参照すると無視されます)、ST_MakePointのようなpigeonコマンドを実行するとすぐにエラーが表示されます:Apache-PigをHadoopで使用しているJARを認識しない

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve ST_MakePoint using imports: [, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.] 

私が使用しています:Ubuntuの14.04.4 LTS、Hadoopの2.7.1(singlenode)、豚0.15.0

をこの問題を解決する方法上の任意の提案は?

+0

ST_makepointとは何ですか?それはクラス名かパッケージ名ですか? – TKHN

+0

申し訳ありません。 ST_MakePointはピジョン・ジャーの関数です。そして私がしているのは ポイント= LOAD 'trajectory.tsv' AS(時刻:datetime、lat:double、lon:double); s_points = FOREACHポイントGENERATE ST_MakePoint(lat、lon)ASポイント、時刻。 のようないくつかのピジョンチュートリアルにあります。 –

+0

この機能をどのクラスで作成したか教えてください。 – Bector

答えて

2

第一の方法:豚における

コール構文:GitHubのからpackagename.ClassName(arg0...)

ソースコード:

package edu.umn.cs.pigeon; 

    import java.io.IOException; 

    import org.apache.pig.EvalFunc; 
    import org.apache.pig.data.DataByteArray; 
    import org.apache.pig.data.Tuple; 

    import com.esri.core.geometry.Point; 
    import com.esri.core.geometry.SpatialReference; 
    import com.esri.core.geometry.ogc.OGCPoint; 

    /** 
    * @author Ahmed Eldawy 
    * 
    */ 

    public class MakePoint extends EvalFunc<DataByteArray> { 

     @Override 
     public DataByteArray exec(Tuple input) throws IOException { 
     if (input.size() != 2) 
      throw new IOException("MakePoint takes two numerical arguments"); 
     double x = ESRIGeometryParser.parseDouble(input.get(0)); 
     double y = ESRIGeometryParser.parseDouble(input.get(1)); 
     Point point = new Point(x, y); 
     OGCPoint ogc_point = new OGCPoint(point, SpatialReference.create(4326)); 
     return new DataByteArray(ogc_point.asBinary().array()); 
     } 
    } 

ので、構文は

FOREACH points GENERATE edu.umn.cs.pigeon.MakePoint(X,Y) 

第二の方法だろう。 利用ショート関数名

完全な関数名(パッケージ+クラス名)を書き込む避けるために、あなたはすべての機能の短い名前を作成し、「pigeon_import.pig」ファイルを使用することができます。ファイルhereをダウンロードし、ピジョンスクリプトの隣に置くことができます。このファイルをスクリプトに読み込むには、スクリプトの先頭に次の行を入力します。 IMPORT 'pigeon_import.pig';その後、あなたはST_MakePoint代わりのedu.umn.cs.pigeon.MakePoint

Reference Blog

としてエンベロープ関数を書くことができます は、この情報がお役に立てば幸いです!

+0

乾杯!それでおしまい!私はそれを得ていなかった、ここではpigeon_import.pig istは言及されていないが使用された:https://github.com/aseldawy/pigeon/blob/master/README.markdown –

関連する問題