理想的には、切り取った次のコードが機能します。
import kudu
from kudu.client import Partitioning
df = … #some spark dataframe
# Connect to Kudu master server
client = kudu.connect(host=‘…‘, port=7051)
# infer schema from spark dataframe
schema = df.schema
# Define partitioning schema
partitioning = Partitioning().add_hash_partitions(column_names=['key'], num_buckets=3)
# Create new table
client.create_table('dev.some_example', schema, partitioning)
ただし、 client.create_table は、データフレームからの構造体ではなく、kudu.schema.Schema を想定しています。ただし、Scala ではこれを行うことができます ( https://kudu.apache.org/docs/developing.htmlから):
kuduContext.createTable(
"dev.some_example", df.schema, Seq("key"),
new CreateTableOptions()
.setNumReplicas(1)
.addHashPartitions(List("key").asJava, 3))
kuduスキーマビルダーで各列を手動で定義せずに、PySparkで同じことができるかどうか疑問に思っていましたか?