Как элегантно (лениво) читать и записывать файлы CSV через библиотеку классов JavaCSV?

Java

Добро пожаловать в публичный аккаунт автора:Сяоха изучает Java, Сосредоточьтесь на продвижении высококачественных сухих статей в области Java! !

личный блог:woohoo.exception.site/essay/how-he…

1. Предпосылки

Компания Xiaoha недавно собирается разработать новую платформу, конкретная платформа не будет здесь раскрываться, потому что это секрет. При окончательном выборе технологии платформы основным технологическим стеком, на который она опирается, является Apache Flink, платформа обработки потоков с открытым исходным кодом Apache Foundation.Основной бизнес платформы будет передан Flink для обработки, включая пакетную обработку в автономном режиме. вычисление задач и вычисление задач в реальном времени.

PS: Сяоха также поделится некоторыми статьями, связанными с Flink, позже. Я думаю, стоит ли установить флаг и создать серию статей по вводным урокам Flink. Я в основном боюсь, что я слишком ленив и не могу вернуть воду. что я пролил. Смущен~ 🤣

а потом? Какое это имеет отношение к теме этой статьи?

Эй, не волнуйся, послушай меня! Основная причина в том, что наш отдел также впервые связывается с Flink, Хотя мы давно слышали это имя и знаем, что его вычислительная производительность чрезвычайно высока, это ложь, и некоторые тесты производительности неизбежны.

Итак, Сяоха взяла автономный сценарий в качестве примера для имитации реальных бизнес-данных.Источником входных данных являются закодированные в формате csv файлы.Протестируйте данные разной величины, 100w, 1000w и 100 миллионов данных, и посмотрите на показатели производительности разных размеров, такие как время выполнения, процессор, память, пропускная способность и т. д.

PS: Поскольку Сяоха, в конце концов, не является профессиональным тестировщиком, я просто провел здесь несколько простых тестов, чтобы получить общее представление о производительности Flink. Если вам это нужно, вы можете использовать специальные инструменты тестирования больших данных, такие как HiBench.

Вот статья «Сравнение производительности Flink и Storm, Stream Computing Framework», подготовленная технической командой Meituan. Заинтересованные партнеры могут прочитать:

Специальности.Meituan.com/2017/11/17/…

Ну, после стольких предзнаменований, собственно, хочу написать статью по гидрологии, без всякого технического содержания, просто порекомендую всем стороннюю библиотеку инструментовJavaCSV, используемый для создания некоторых файлов тестовых данных csv, я лично считаю его очень элегантным и удобным (ленивый ~ меньше кода ~).

Адрес официального сайта JavaCSV:источник forge.net/projects/Urgent…

Документация по API JavaCSV:javacsv.sourceforge.net/

2. Старт

2.1 Добавление зависимостей Maven

<dependency>
    <groupId>net.sourceforge.javacsv</groupId>
    <artifactId>javacsv</artifactId>
    <version>2.0</version>
</dependency>

2.2 Запись файлов

как пройтиjavacsvКак насчет создания CSV-файла? См. пример кода ниже:

/**
 * @author 犬小哈(公众号:小哈学Java)
 * @date 2019/4/12
 * @time 下午3:05
 * @discription 读写 csv 文件
 **/
public class ReadAndWriterCsvFlie {

    // 需要写入的 csv 文件路径
    public static final String WRITE_CSV_FILE_PATH = "/Users/a123123/Work/flink-study/write_test.csv";

    /**
     * 生成 csv 文件
     */
    public static void writeCsvFile(String writeCsvFilePath) {
        // 创建 CSV Writer 对象, 参数说明(写入的文件路径,分隔符,编码格式)
        CsvWriter csvWriter = new CsvWriter(writeCsvFilePath,',', Charset.forName("GBK"));

        try {
            // 定义 header 头
            String[] headers = {"订单号", "用户名", "支付金额"};
            // 写入 header 头
            csvWriter.writeRecord(headers);

            // 写入一千条记录
            for (int i = 0; i < 1000; i++) {
                String orderNum = UUID.randomUUID().toString();
                String userName = "用户" + i;
                String payMoney = String.valueOf(i);

                // 写入行
                csvWriter.writeRecord((String[]) Arrays.asList(orderNum, userName, payMoney).toArray());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            csvWriter.close();
        }
    }

    public static void main(String[] args) {
        writeCsvFile(WRITE_CSV_FILE_PATH);
    }
}

С помощью приведенного выше примера кода мы можем легко создать пакет тестовых данных, просто нужно изменить количество генерируемых строк. По сравнению с другими библиотеками объем кода все еще очень мал.

Запустите код, см. Конечные рендеринга:

2.1 Чтение файлов

как пройтиjavacsvЧтобы написать файл csv, давайте поговорим о том, как читать файл csv, просто используйте файл csv, сгенерированный выше, в качестве источника чтения, пример кода выглядит следующим образом:

/**
 * @author 犬小哈(公众号:小哈学Java)
 * @date 2019/4/12
 * @time 下午3:05
 * @discription 读写 csv 文件
 **/
public class ReadAndWriterCsvFlie {

    // 需要写入的 csv 文件路径
    public static final String WRITE_CSV_FILE_PATH = "/Users/a123123/Work/flink-study/write_test.csv";

    /**
     * 读取 csv 文件
     */
    public static void readCsvFile(String readCsvFilePath) {
        // 缓存读取的数据
        List<String[]> content = new ArrayList<>();

        try {
            // 创建 CSV Reader 对象, 参数说明(读取的文件路径,分隔符,编码格式)
            CsvReader csvReader = new CsvReader(readCsvFilePath, ',', Charset.forName("GBK"));
            // 跳过表头
            csvReader.readHeaders();

            // 读取除表头外的内容
            while (csvReader.readRecord()) {
                // 读取一整行
                String line = csvReader.getRawRecord();
                System.out.println(line);

                content.add(csvReader.getValues());
            }
            csvReader.close();

            for (int row = 0; row < content.size(); row++) {
                // 读取第 row 行,第 0 列的数据
                String orderNum = content.get(row)[0];
                System.out.println("==> orderNum: " + orderNum);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        readCsvFile(WRITE_CSV_FILE_PATH);
    }
}

Запустите код и увидите эффект печати консоли:

Законченная работа~

Суммировать

В этой статье Xiaoha в основном поможет вам понять, как использовать сторонние библиотеки.JavaCSVДля чтения и записи CSV-файлов он не может широко использоваться в реальных сценариях, и используются более унифицированные файловые библиотеки, такие как Ali EasyExcel, EasyPOI и т. д. Сяоха использует его здесь только для создания тестовых данных.

PS: Что касается учебника EasyExcel, вы можете прочитать статью, написанную Сяохой ранее:«7 строк кода элегантно реализуют функцию создания и загрузки файлов Excel»

Ладно, гидрология окончена, друзья, кому она показалась полезной, не забудьте нажать и посмотреть снова~ Спасибо~ Увидимся в следующем выпуске~

Ref

Добро пожаловать в публичный аккаунт WeChat: Сяоха изучает Java

Для получения дополнительных статей о галантерейных товарах, пожалуйста, обратите внимание на официальный аккаунт автора: Xiaoha Learning Java (ID: xiaoha_java), посвященный обмену статьями о галантерейных товарах в области Java, не ограничиваясь обменом вопросами интервью BAT, Spring Boot, Spring Cloud, high параллелизм, JVM, база данных, контейнеры Docker, ELK и другие связанные знания, кроме того, обратите внимание на ответ «Ресурсы», вы можете получить самые популярные ресурсы для интервью и изучения архитектуры Java в полном тексте ~

关注微信公众号【小哈学Java】,回复【资源】,即可免费无套路领取资源链接哦