0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 package test.org.apache.spark.sql.connector;
0019
0020 import java.util.Map;
0021
0022 import org.apache.spark.sql.connector.catalog.Table;
0023 import org.apache.spark.sql.connector.catalog.TableProvider;
0024 import org.apache.spark.sql.connector.expressions.Transform;
0025 import org.apache.spark.sql.connector.read.InputPartition;
0026 import org.apache.spark.sql.connector.read.ScanBuilder;
0027 import org.apache.spark.sql.types.StructType;
0028 import org.apache.spark.sql.util.CaseInsensitiveStringMap;
0029
0030 public class JavaSchemaRequiredDataSource implements TableProvider {
0031
0032 class MyScanBuilder extends JavaSimpleScanBuilder {
0033
0034 private StructType schema;
0035
0036 MyScanBuilder(StructType schema) {
0037 this.schema = schema;
0038 }
0039
0040 @Override
0041 public StructType readSchema() {
0042 return schema;
0043 }
0044
0045 @Override
0046 public InputPartition[] planInputPartitions() {
0047 return new InputPartition[0];
0048 }
0049 }
0050
0051 @Override
0052 public boolean supportsExternalMetadata() {
0053 return true;
0054 }
0055
0056 @Override
0057 public StructType inferSchema(CaseInsensitiveStringMap options) {
0058 throw new IllegalArgumentException("requires a user-supplied schema");
0059 }
0060
0061 @Override
0062 public Table getTable(
0063 StructType schema, Transform[] partitioning, Map<String, String> properties) {
0064 return new JavaSimpleBatchTable() {
0065
0066 @Override
0067 public StructType schema() {
0068 return schema;
0069 }
0070
0071 @Override
0072 public ScanBuilder newScanBuilder(CaseInsensitiveStringMap options) {
0073 return new MyScanBuilder(schema);
0074 }
0075 };
0076 }
0077 }