Я пишу повторяющиеся строковые значения в строковый столбец в файле ORC с использованием Java и при чтении файла ORC обрJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Я пишу повторяющиеся строковые значения в строковый столбец в файле ORC с использованием Java и при чтении файла ORC обр

Сообщение Anonymous »

Когда я пытаюсь написать одно и то же значение для каждой строки для строки в файле ORC, только первая строка возвращает письменное значение, при чтении оставшихся строк сталкивается с нулевым вопросом указателя. В некоторых случаях мы могли бы столкнуться с этой проблемой, поэтому ищу решение этой проблемы.import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.ql.exec.vector.BytesColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;
import org.apache.orc.CompressionKind;
import org.apache.orc.OrcFile;
import org.apache.orc.TypeDescription;
import org.apache.orc.impl.WriterImpl;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class ORCWriter {

public static void main(String[] args) throws IOException {
// Define the schema
TypeDescription schema = TypeDescription.createStruct()
.addField("value", TypeDescription.createString())
.addField("quality", TypeDescription.createLong());

// Create a configuration object
Configuration conf = new Configuration();

// Create a WriterImpl instance
WriterImpl writer = (WriterImpl) OrcFile.createWriter(new Path("testString.orc"),
OrcFile.writerOptions(conf).setSchema(schema).stripeSize(1024).compress(CompressionKind.SNAPPY));

// Create a batch to hold the data
VectorizedRowBatch batch = schema.createRowBatch();
BytesColumnVector value = (BytesColumnVector)batch.cols[0];
LongColumnVector quality = (LongColumnVector)batch.cols[1];

int start = 0;
int end = 100;
while (start < end) {
int row = batch.size++;
value.setVal(row, ("value").getBytes(StandardCharsets.UTF_8));
quality.vector[row] = start;

start += 1;
if (batch.size == batch.getMaxSize()) {
writer.addRowBatch(batch);
batch.reset();
}
}
if (batch.size != 0) {
writer.addRowBatch(batch);
batch.reset();
}
writer.close();
}
}
< /code>
orc reader logic: < /p>
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.ql.exec.vector.BytesColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;
import org.apache.orc.OrcFile;
import org.apache.orc.Reader;
import org.apache.orc.RecordReader;
import org.apache.orc.TypeDescription;

public class ORCReader {

public static void main(String[] args) throws Exception {
// Create a configuration object
Configuration conf = new Configuration();

// Create a Reader instance
Reader reader = OrcFile.createReader(new Path("testString.orc"),
OrcFile.readerOptions(conf));

// Get the schema of the ORC file
TypeDescription schema = reader.getSchema();

// Create a batch to hold the data
VectorizedRowBatch batch = schema.createRowBatch();

// Create a RecordReader to read the data
RecordReader rows = reader.rows();
int rowcount = 1;
long startTime = System.currentTimeMillis();
// Read the data
while (rows.nextBatch(batch)) {
BytesColumnVector value = (BytesColumnVector) batch.cols[0];

for (int r = 0; r < batch.size; ++r) {
String valueStr = new String(value.vector[r], value.start[r], value.length[r]);
System.out.println("Row " + rowcount + " value: " + valueStr);
rowcount++;
}
}
System.out.println("Total time :: "+(System.currentTimeMillis() - startTime));

// Close the RecordReader
rows.close();
}
}
< /code>
Подробная информация об исключении при попытке прочитать файл ORC: способное считывать значение из столбца значений без каких -либо проблем для первой строки и увидеть проблему с нулевым указателем из второй строки < /p>

ряд 1 Значение: значение < /p>
< /blockquote>
Исключение. Длина, потому что «байты» - это null
at java.base /java.lang.string.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... using-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»