Функции Scala Spark, такие как group by, describe (), возвращают неверный результат

#scala #apache-spark #apache-spark-sql

Вопрос:

Я использовал Scala Spark в среде IDE intellij для анализа csv-файла, содержащего 672 112 записей . Файл доступен по ссылке — https://www.kaggle.com/kiva/data-science-for-good-kiva-crowdfunding

Имя файла : kiva_loans.csv

Я запустил команду show() для просмотра нескольких записей, и она правильно считывает все столбцы, но когда я применяю группировку по столбцу «repayment_interval», она отображает значение, которое похоже на данные из других столбцов (сдвиг столбцов), как показано ниже.

введите описание изображения здесь

различными значениями в столбцах «repayment_interval» являются

  1. Ежемесячно (чаще)
  2. непостоянный
  3. пуля
  4. еженедельно (реже)

Для целей тестирования я искал значения, указанные на скриншоте, помещал эти строки в отдельный файл и пытался прочитать этот файл с помощью scala spark. Он показывает все значения в правильном столбце, и даже groupby возвращает правильные значения.

Я сталкиваюсь с этой проблемой с помощью функции describe (). введите описание изображения здесь

Как показано на рисунке выше , идентификатор столбца и «funded_amount» — это числовые столбцы, но не уверен, почему функция describe() на них дает строковые значения для «min»,»max».

прочитайте команду csv, как показано ниже

   val kivaloans=spark.read
      //.option("sep",",")
      .format("com.databricks.spark.csv")
      .option("header",true)
      .option("inferschema","true")
      .csv("kiva_loans.csv")
 

Вывод печатной схемы после добавления «.опция(«многострочная»,»истина»)». Он читает несколько строк в качестве заголовка, как показано на выделенном желтом цвете.

введите описание изображения здесь

Ответ №1:

Похоже, в данных столбцов появились новые символы строк. Следовательно, установите свойство multiline как true.

 val kivaloans=spark.read.format("com.databricks.spark.csv")
                        .option("multiline","true")
                        .option("header",true)
                        .option("inferschema","true")
                        .csv("kiva_loans.csv")
 

Сводка данных выглядит следующим образом после установки многострочного значения true:

  ------- ------------------ ----------------- ----------------- ---------- ----------- -------------------- -------------------- ------------------ ------------ ------------------ -------------------- -------------------- -------------------- -------------------- ----------------- ------------------ -------------------- -------------------- -------------------- -------------------- 
|summary|                id|    funded_amount|      loan_amount|  activity|     sector|                 use|        country_code|           country|      region|          currency|          partner_id|         posted_time|      disbursed_time|         funded_time|   term_in_months|      lender_count|                tags|    borrower_genders|  repayment_interval|                date|
 ------- ------------------ ----------------- ----------------- ---------- ----------- -------------------- -------------------- ------------------ ------------ ------------------ -------------------- -------------------- -------------------- -------------------- ----------------- ------------------ -------------------- -------------------- -------------------- -------------------- 
|  count|            671205|           671205|           671205|    671205|     671205|              666977|              671197|            671205|      614441|            671186|              657699|              671195|              668808|              622890|           671196|            671199|              499834|              666957|              671191|              671199|
|   mean| 993248.5937336581|785.9950611214159|842.3971066961659|      null|       null|             10000.0|                null|              null|        null|              null|  178.20274555550654|  162.01020408163265|  179.12244897959184|               189.3|13.74266332047713|20.588457578299735|   25.68553459119497|                26.4|  26.210526315789473|  27.304347826086957|
| stddev|196611.27542282813|1130.398941057504|1198.660072882945|      null|       null|                 NaN|                null|              null|        null|              null|   94.24892231613454|   78.65564973356628|  100.70555939905975|  125.87299363372507|8.631922222356161|28.458485403188924|  31.131029407317044|   35.87289875191111|   52.43279244938066|   41.99181173710449|
|    min|            653047|              0.0|             25.0|Adult Care|AgricultuTo buy chicken.|  ""fajas"" [wove...| 10 boxes of cream| 3x1 purlins| T-shaped brackets| among other prod...| among other item...| and pay for labour"| and cassava to m...|            yeast|              rice|                milk| among other prod...|#Animals, #Biz Du...|            #Elderly|
|    25%|            823364|            250.0|            275.0|      null|       null|             10000.0|                null|              null|        null|              null|               126.0|               123.0|               105.0|                87.0|              8.0|               7.0|                 8.0|                 8.0|                 9.0|                 6.0|
|    50%|            992996|            450.0|            500.0|      null|       null|             10000.0|                null|              null|        null|              null|               145.0|               144.0|               144.0|               137.0|             13.0|              13.0|                14.0|                15.0|                14.0|                17.0|
|    75%|           1163938|            900.0|           1000.0|      null|       null|             10000.0|                null|              null|        null|              null|               204.0|               177.0|               239.0|               201.0|             14.0|              24.0|                27.0|                31.0|                24.0|                34.0|
|    max|           1340339|         100000.0|         100000.0| Wholesale|  Wholesale|? provide a safer...|                  ZW|          Zimbabwe|       ?ZM?T|           baguida|                 XOF|                 XOF|          Yoro, Yoro|                 USD|              USD|               USD|volunteer_pick, v...|volunteer_pick, v...|              weekly|volunteer_pick, v...|
 ------- ------------------ ----------------- ----------------- ---------- ----------- -------------------- -------------------- ------------------ ------------ ------------------ -------------------- -------------------- -------------------- -------------------- ----------------- ------------------ -------------------- -------------------- -------------------- -------------------- 
 

Комментарии:

1. Привет @Viapak — использование .option(«многострочный»,»true») приводит к тому, что несколько строк читаются как заголовок. Я добавил вывод printSchema в исходное описание вопроса выше.