Pyspark Hive SQL - データなしデータが挿入されていません -- python フィールド と sql フィールド と apache-spark フィールド と hive フィールド と insert-into フィールド 関連 問題

PySpark Hive SQL - No data inserted












0
vote

問題

日本語

Pysparkスクリプト(Python for Spark)を介してhiveで私のテーブル "テスト"を挿入したいと思います。

私は、癒しのためにHiveのためのHueのグラフィックインターフェースの「動物」の最初のテーブル「動物」を作成しました:

<事前> <コード> CREATE TABLE animals( id int, animal String)

新しいテーブルを得ました。このスクリプトを作成して、新しい行(1、犬)を追加するために書いています。

<事前> <コード> from pyspark.conf import SparkConf from pyspark import SparkContext from pyspark.sql import SQLContext, HiveContext sc = SparkContext() hc = HiveContext(sc) dataToInsert = hc.sql("select 1 as id, 'dog' as animal") dataToInsert.write.mode("append").insertInto("animals")

ターミナルで「sudo pyspark myscript.py」を実行した後、それは何も追加しないようです。

火花のためのPythonスクリプトを通してhive / ippalaテーブルにデータを挿入するための別の方法を知っていますか?

事前にありがとう!

英語

I would like to insert some data my table "test" in Hive through a pySpark script (python for Spark).

I created first of all a table "animals" in the HUE's graphic interface for Hive thank to the query :

CREATE TABLE animals( id int, animal String)  

Thus I got a new table. I wrote this script in order to add a new line (1, dog) to it :

from pyspark.conf import SparkConf from pyspark import SparkContext from pyspark.sql import SQLContext, HiveContext  sc = SparkContext() hc = HiveContext(sc) dataToInsert = hc.sql("select 1 as id, 'dog' as animal") dataToInsert.write.mode("append").insertInto("animals") 

After having executed it (several times with "sudo pyspark myscript.py" in the terminal), it seems it doesn't add anything.

Do you know how to fix that or another way to insert data into a Hive/Impala table through a python script for Spark please ?

Thanks in advance !

</div
              
       
       

回答リスト

0
 
vote

Child2 という表を作成し、 Child3 に挿入しているため、存在しない可能性があるためです。

動物を交換して試験してみてください。必ず Child4 で終了して Child5

の使用を開始してください。 <事前> <コード> Child Screen16

大丈夫です。どのバージョンを使っていますか? > ENTER IMART記述ここで

 

It is probably because you have created a table called test and you are inserting into animals which may not exist.

try with changing animals to test. Make sure you end with sc.stop() and start using spark-submit

from pyspark.conf import SparkConf from pyspark import SparkContext from pyspark.sql import SQLContext, HiveContext  sc = SparkContext() hc = HiveContext(sc) dataToInsert = hc.sql("select 1 as id, 'dog' as animal") dataToInsert.write.mode("append").insertInto("test") sc.stop() 

It just works fine. What version are you using? enter image description here

</div
 
 
     
     
0
 
vote

問題は<コード> Child7 の<コード> Child8 の使用時に、Spark 1.4で推奨されています。

Child9 のようなものは、スキーマ名はマンダトロイです。

上記のものがあなたを残してあなたを去ったら、ハイブテーブルのHDFSパスに書いてみましょう。 ComponentDidUpdate0 のどちらかのPyspark Job SQLコマンドを実行した後に、Hiveテーブルを修復することをお勧めします。

なぜあなたはMSCK修理が必要なのですか?他の答えをチェックしてくださいここ

これは doc スナップショット:

SAVEESTABLE(name、format = none、mode = none、partitionby = none、**オプション) データフレームの内容を指定された表として保存します。

テーブルが既に存在する場合、この関数の動作 モード機能で指定された保存モードによって異なります(デフォルト 例外を投げる)。モードが上書きされると、そのスキーマ DataFrameは既存のテーブルのそれと同じである必要はありません。

追加: このデータフレームの内容を既存のデータに追加します。

上書き: 既存のデータを上書きします。エラー:データの場合は例外をスローしてください 存在します。

ignoreデータが既に存在する場合は、この操作を無視してください。 パラメータ:name - テーブル名形式 - 保存に使用されるフォーマット

MODE - 追加、上書き、エラー、無視(デフォルト:エラー)

parityby - パーティション列の名前オプション - 他のすべての文字列 バージョン1.4の新機能。

 

Looks like the issue is at insertInto Try using the saveAsTable instead, insertInto is deprecated in spark 1.4.

Something like dataToInsert.write.mode("append").saveAsTable("SchemaName.animals") note that schema name is mandatroy.

if the above one leaves you with no luck try writing to the hive tables HDFS path. I would also suggest you repair the hive table after running the pyspark job sql command for it : msck repair table <schema.tablename>; either from hiveContext or hive.

Why do you need msck repair ?? check out my other answer here

Here is Doc snapshot :

saveAsTable(name, format=None, mode=None, partitionBy=None, **options) Saves the content of the DataFrame as the specified table.

In the case the table already exists, behavior of this function depends on the save mode, specified by the mode function (default to throwing an exception). When mode is Overwrite, the schema of the DataFrame does not need to be the same as that of the existing table.

append: Append contents of this DataFrame to existing data.

overwrite: Overwrite existing data. error: Throw an exception if data already exists.

ignore: Silently ignore this operation if data already exists. Parameters: name – the table name format – the format used to save

mode – one of append, overwrite, error, ignore (default: error)

partitionBy – names of partitioning columns options – all other string options New in version 1.4.

</div
 
 

関連する質問

1  2つの挿入を1つのコマンドに組み合わせる  ( Combining 2 insert into in one command ) 
私はこれを理解することができませんでした: Table-Aに行を追加したいと、この行の3列はTable-Bから来、他の2列はe.g TextBoxeから来ています... このコードはうまくいきませんでした... <事前> <コード> SqlCommand c...

0  一時テーブルMySQLに複数の挿入  ( Multiple inserts in temporary table mysql ) 
ストアドプロシージャのMySQLの一時テーブルで3つの挿入コマンドを実行しようとしていますが、SELECTコマンドは最初の挿入/挿入されたのみを表示します。 <事前> <コード> CREATE TEMPORARY TABLE IF NOT EXISTS Ot...

64  MySQL複数行を選択した副問合せを選択してテーブルに挿入する方法  ( Mysql how do you insert into a table with a select subquery returning multiple r ) 
MySQL複数行を返す副問合せを選択してテーブルに挿入する方法は? <事前> <コード> INSERT INTO Results ( People, names, ) VALUES ( ( ...

1  条件付きの挿入後のOracleトリガー  ( Oracle trigger after insert with condition ) 
PL / SQLプログラミングには新しいもので、簡単なトリガーを作成するためのタスクがありました。下のコードを参照してください。 <事前> <コード> CREATE OR REPLACE TRIGGER TRG_ACCT_IDW AFTER INSE...

1  複数のMySQLテーブルを外部キーと接続します  ( Connecting multiple mysql tables with foreign keys ) 
MySQLに3つのテーブルを持っています: クライアント フライト 予約 ON Clients 名前 姓 id フライト番号(フライトテーブルから) 予約番号(予約から) <コード> Flights ID(クライアントから) フ...

0  1つのテーブルが作成されていない他のものが作成されています  ( One table is not being created other is being created ) 
MySQLを使用してデータベースにテーブルの作成に取り組んでいますが、ここに私のコードがあります: <事前> <コード> mysqli_query($link, "CREATE TABLE IF NOT EXISTS `review` ( ...

-2  SQL DML - SQL-ex.ru演習18の方法  ( How to sql dml sql ex ru exercise 18 ) 
私は解決策を見つけることができた時間の間、私が解決策を見つけることができましたが、エクササイズソリューション自体では、正しい数の結果が得られましたが、いわばいないと言っています。 これは彼らが提案する運動です。 出荷テーブルに結果をテーブルに追加する必要があ...

1  SQL Server 2008:Timestamp(6)列を使用して、リンクサーバーをOracle 11gテーブルに挿入する  ( Sql server 2008 insert into through linked server to oracle 11g table with time ) 
リンクサーバーを介して、SQL Server 2008スクリプトのOracle 11gテーブルのTIMESTAMP(6)列の行を挿入しようとしています。 これは私が今まで試したものです: <事前> <コード> INSERT INTO LinkedServer....

0  CASEステートメントに挿入してください  ( Insert into with case statement ) 
私はテストデータベースの中にいくつかのことをめちゃくちゃにしていて、やりたいものに出会いました。将来的には、新しい日付と予算情報を含む1つのテーブルにいくつかの情報を更新する必要があります。これが私のコードです... <事前> <コード> USE REPOR...

119  挿入...すべてのMySQL列に対して選択します  ( Insert into select for all mysql columns ) 
私は古いデータをから動こそうとしています: <事前> <コード> pull2 すべての列をコピーします。私はこれを試してみましたが、うまくいきません: <事前> <コード> pull3 注:表は同一で、 pull4 が主キーとして設定されています。 ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有