問題タブ [hive-udf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hive - Hive カスタム UDF の JAR を追加して、HDInsight クラスターで永続的に使用できるようにする方法を教えてください。
Hive でカスタム UDF を作成しました。Hive コマンド ラインでテストされ、正常に動作します。これで、UDF の jar ファイルができました。ユーザーがそれを指す一時関数を作成できるようにするには、どうすればよいでしょうか? 理想的には、Hive のコマンド プロンプトから次のようにします。
この後、機能を適切に使用できるようになりました。
しかし、関数を実行するたびにjarを追加したくありません。この関数を実行できるはずです:-
- Visual Studio から HDInsight クラスターに対して Hive クエリを実行する
- コマンド ラインから SSH (Linux) または RDP/cmd (Windows) を介して Hive クエリを実行する
- Ambari (Linux) Hive ビューからの Hive クエリの実行
- HDinsight クエリ コンソール Hive エディター (Windows クラスター) からの Hive クエリの実行
したがって、どのようにクエリを実行しても、JAR は既に利用可能であり、パスに追加されている必要があります。Linux クラスターと Windows クラスターでこれを保証するプロセスは何ですか?
hive-udf - 特定の列を切り捨てるためのハイブUDFコードを提供してもらえますか?
double 値 42.2223 を含む列があります。この特定の列の下 4 桁を切り捨てたいと考えています。
この特定のシナリオにハイブ UDF を提供してもらえますか?
hadoop - Hive での CROSS APPLY SQL Server クエリ
Ambari 2.4.0.1 を使用した HDP-2.5.0.0
Hive テーブルの ReportSetting は次のとおりです。
列 'serializedreportsetting' は、ソース SQL Server db の XML データ型ですが、Sqoop インポート中に文字列に変換されます。これは、SQL Server でどのように見えるかです。
ハイブ テーブル:
SQL Server で正常に動作するクエリ:
私は次のことを考えたり実行したりできます:
- CROSS APPLY を使用するには、横方向のビューを使用する必要があると思います。ここでは serializedreportsetting を配列として持っていないため、explode() は機能しません。私が正しい方向に考えているかどうか誰かが検証できますか
組み込みの xpath udfを使用して serializedreportsetting のデータを列として取得しようとしただけですが、レコードを取得できません。次のような試行はほとんどありません。
ReportSetting limit 1 から xpath(SerializedReportSetting,'/*') を選択します。
ReportSetting limit 1 から xpath(SerializedReportSetting,'/ReportSettings4') を選択します。
ReportSetting limit 1 から xpath(SerializedReportSetting,'/Trigger/Manual') を選択します。
**********更新-1************
上記の課題を処理するために regexp_replace を使用しました。
xpath - HiveUDF + saxon 9.1.0.8 + Java8 = XPathFactory の作成に失敗しました
コードでUDFが定義されていない限り、HiveContextとSaxonを使用したSparkジョブは正常に動作します。UDF 実装の場合 - HiveContext の初期化がエラーで失敗しました。saxon 9.5.1.5 で解決された saxon\java8 の非互換性があると聞きましたが、これは中央の Maven リポジトリで無料バージョンとしてまだリリースされていません。
原因: java.lang.RuntimeException: XPathFactory#newInstance() は、デフォルト オブジェクト モデルの XPathFactory を作成できませんでした: http://java.sun.com/jaxp/xpath/domXPathFactoryConfigurationException の場合: javax.xml.xpath.XPathFactoryConfigurationException: java.util.ServiceConfigurationError: javax.xml.xpath.XPathFactory: jar:file:/JBOD_D19/hadoop/cdh/yarn/nm/usercache/u23120d1/appcache/application_1477998759081_5017/container_e45_1477998759087_001_150 /saxon-xpath-9.1.0.8.jar!/META-INF/services/javax.xml.xpath.XPathFactory:2: javax.xml.xpath.XPathFactory.newInstance(XPathFactory.java:102) での設定ファイルの構文が正しくありませんorg.apache.hadoop.hive.ql.udf.xml.UDFXPathUtil.(UDFXPathUtil.java:41) で org.apache.hadoop.hive.ql.udf.xml.GenericUDFXPath.(GenericUDFXPath.java:53) で
apache-spark - 複数の double データ型列の spark SQL で中央値を見つける
複数の double データ型列の中央値を見つける必要があります。正しいアプローチを見つけるための提案をリクエストしてください。
以下は、1 列のサンプル データセットです。サンプルの中央値が 1 として返されることを期待しています。
次のオプションを試しました
1) Hive UDAF パーセンタイル。BigInt でのみ機能しました。
2) Hive UDAT percentile_approx ですが、期待どおりに動作しません (0.25 対 1 を返します)。
sqlContext.sql("select percentile_approx(num,0.5) from test").show();
3) Spark ウィンドウ関数 percent_rank - 中央値を見つける方法は、0.5 を超えるすべての percent_rank を探し、最大 percent_rank の対応する num 値を選択することです。しかし、特にレコード数が偶数の場合、すべての場合に機能するとは限りません。そのような場合、中央値はソートされた分布の中央値の平均です。
また、percent_rank では、複数の列の中央値を見つける必要があるため、異なるデータフレームで計算する必要がありますが、これは私にとっては少し複雑な方法です。私の理解が正しくない場合は、修正してください。