2017-05-22 1 views
0

データフレームがあり、hbaseに挿入したい。私はこれに従うdocumenationスパークデータフレームをhbaseに挿入する

 -------------------- 
    |id | name | address | 
    |--------------------| 
    |23 |marry |france | 
    |--------------------| 
    |87 |zied |italie | 
    -------------------- 

私はこのコードを使用して、HBaseのテーブルを作成:

val tableName = "two" 
val conf = HBaseConfiguration.create() 
if(!admin.isTableAvailable(tableName)) { 
      print("-----------------------------------------------------------------------------------------------------------") 
      val tableDesc = new HTableDescriptor(tableName) 
      tableDesc.addFamily(new HColumnDescriptor("z1".getBytes())) 
      admin.createTable(tableDesc) 
     }else{ 
      print("Table already exists!!--------------------------------------------------------------------------------------") 
     } 

を、今どのように私はHBaseのには、このデータフレームを挿入することができる

これは、ように私のデータフレームの外観がどのようにでしょうか?私はこのコードを使用してのHBaseに挿入し成功する別の例では

val myTable = new HTable(conf, tableName) 
    for (i <- 0 to 1000) { 
     var p = new Put(Bytes.toBytes(""+i)) 
     p.add("z1".getBytes(), "name".getBytes(), Bytes.toBytes(""+(i*5))) 
     p.add("z1".getBytes(), "age".getBytes(), Bytes.toBytes("2017-04-20")) 
     p.add("z2".getBytes(), "job".getBytes(), Bytes.toBytes(""+i)) 
     p.add("z2".getBytes(), "salary".getBytes(), Bytes.toBytes(""+i)) 
     myTable.put(p) 
    } 
    myTable.flushCommits() 

しかし、今、私は私のHBaseのテーブルに私のデータフレームの各レコードを挿入する方法、立ち往生しています。

は目的 ドキュメントの書式設定コードのための答えを使用して、あなたの時間と注意

+0

問題は明確ではありません。あなたは何か他のことをやっている。 https://hbase.apache.org/book.html#_sparksql_dataframesではカタログを定義し、sc.parallelize(data).toDF.write.optionsでDFをHBaseに保存するように指示します。 – Sergey

+0

はい、私はそのドキュメントを使用していると言います。私はここでスタックしています。val data =(0〜255).map {i => HBaseRecord(i、 "extra")} '0から255までのデータフレームのforeachレコードを挿入する方法 –

答えて

0

をありがとう伝えます:

sc.parallelize(data).toDF.write.options(
Map(HBaseTableCatalog.tableCatalog -> catalog, HBaseTableCatalog.newTable -> "5")) 
.format("org.apache.hadoop.hbase.spark ") 
.save() 

sc.parallelize(データ).toDFがあなたのデータフレームです。ドクの例では、ちょうど

yourDataFrame.write.options(
    Map(HBaseTableCatalog.tableCatalog -> catalog, HBaseTableCatalog.newTable -> "5")) 
    .format("org.apache.hadoop.hbase.spark ") 
    .save() 

を呼び出そうと、それは動作するはずです、あなたはすでにあなたのデータフレームを持ってsc.parallelize(データ).toDF

を使用してデータフレームにScalaのコレクションになります。ドクは

UPD

Given a DataFrame with specified schema, above will create an HBase table with 5 regions and save the DataFrame inside. Note that if HBaseTableCatalog.newTable is not specified, the table has to be pre-created.

これは、データ・パーティショニングについてです...かなり明確です。各HBaseテーブルは1 ... Xの領域を持つことができます。あなたは慎重に地域の数を選択する必要があります。低い地域数は悪いです。高い地域番号も悪いです。

+0

ありがとうございます。 'HBaseTableCatalog.newTable - >" 5 "' –

+0

答えを更新しました、上記を参照してください。 5は、HBase – Sergey

+0

のテーブル用に5つの領域を作成することを意味し、カタログはどこに定義されていますか? 'ケースクラスHBaseRecord( COL0:文字列、 COL1:文字列、 COL2:文字列 ) オブジェクトHBaseRecord { はデフ適用(I:INT、T:文字列):HBaseRecord = { ヴァルS = sの ""」 HBaseRecord(s、s "文字列$ i:$ t"、 "文字列$ i:$ t") } } ''後で何をするのですか? ? –

関連する問題