Значения NULL при попытке импортировать CSV в DBFS блоков данных Azure - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь импортировать файл CSV, у которого нет заголовков, в DBFS для блоков данных Azure, но, независимо от того, использую ли я пользовательский интерфейс или пытаюсь сделать это по коду, в выходных данных отображаются нулевые значения для всех четырех столбцов.

Вот код, который я запустил:

from pyspark.sql.types import *

# File location and type
file_location = "/FileStore/tables/sales.csv"
file_type = "csv"

# Options

delimiter = ","

customSchema = StructType([\
    StructField("id", StringType(), True),\
    StructField("company", IntegerType(), True),\
    StructField("date", TimestampType(), True),\
    StructField("price", DoubleType(), True)])

# Dataframe from CSV
df = spark.read.format(file_type) \
    .schema(customSchema) \
    .option("sep", delimiter) \
    .load(file_location)

display(df)

И вывод, который я получаю:

Databricks Output

Чтоздесь происходит? Если я не определяю какую-либо схему, она отлично загружает данные, но тогда у меня нет возможности ни указать заголовки, ни указать типы данных.

1 Ответ

1 голос
/ 30 сентября 2019

Я загрузил образец CSV-файла для проверки вашего скрипта, содержание которого показано ниже.

1,Company-A,2019-09-30,10.01
2,Company-B,2019-09-29,20.02

Затем я попытался воспроизвести вашу проблему успешно, как показано на рисунке ниже, и я думаю, что проблема была вызвананеправильным типом для поля структуры company.

enter image description here

Поэтому я попытался использовать StringType вместо IntegerType для поля company, тогда он работает нормально, как показано на рисунке ниже.

enter image description here

Между тем, если значение поля date является просто датой,Вы можете использовать DateType вместо TimestampType и результат, как показано на рисунке ниже.

enter image description here

Кстати, есть два других решения дляваши потребности.

  1. Используйте функцию spark.read.csv с параметром schema для чтения файла csv без заголовка, как показано на рисунке и рисунке ниже.

    df = spark.read.csv(file_location, schema='id INT, company STRING, date DATE, price DOUBLE')
    display(df)
    

    enter image description here

  2. Используйте пакет pandas, чтобы сначала прочитать файл csv из пути к файлу dbfs в кирпичах данных Azure, а затем создатьИскра Кадр данных из кадра данных панд, как код и рисунок ниже.

    import pandas as pd
    df_pandas = pd.read_csv('/dbfs/FileStore/tables/sales.csv', header=None, names = ['id', 'company', 'date', 'price'])
    df = spark.createDataFrame(df_pandas)
    display(df)
    

    enter image description here

...