Поделиться через


Использование .NET для Apache Spark с помощью Azure Synapse Analytics

.NET для Apache Spark обеспечивает бесплатную открытую кроссплатформенную поддержку .NET для Spark.

.NET для Apache Spark предоставляет привязки .NET для Spark, которые позволяют использовать API-интерфейсы Spark на языках C# и F#. Кроме того, .NET для Apache Spark позволяет создавать и выполнять определяемые пользователем функции для Spark, написанные с помощью .NET. Интерфейсы API .NET для Spark предоставляют доступ ко всем аспектам Spark DataFrames для анализа данных, включая Spark SQL, Delta Lake и структурированную потоковую передачу.

Вы можете анализировать данные в .NET для Apache Spark с использованием определений пакетных заданий Spark или интерактивных записных книжек Azure Synapse Analytics. Из этой статьи вы узнаете, как работать с .NET для Apache Spark в Azure Synapse Analytics с помощью обоих методов.

Важно!

.NET для Apache Spark — это проект с открытым исходным кодом в .NET Foundation, который в настоящее время требует библиотеки .NET 3.1, которая достигла состояния вне поддержки. Мы хотели бы сообщить пользователям Azure Synapse Spark об удалении библиотеки .NET для Apache Spark в среде выполнения Azure Synapse для Apache Spark версии 3.3. Пользователи могут обратиться к политике поддержки .NET для получения дополнительных сведений об этом вопросе.

В результате пользователи больше не смогут использовать API Apache Spark через C# и F#, или выполнить код C# в записных книжках в Synapse или с помощью определений заданий Apache Spark в Synapse. Важно отметить, что это изменение влияет только на среду выполнения Azure Synapse для Apache Spark 3.3 и выше.

Мы будем продолжать поддерживать .NET для Apache Spark во всех предыдущих версиях среды выполнения Azure Synapse в соответствии с их этапами жизненного цикла. Однако у нас нет планов поддержки .NET для Apache Spark в Среде выполнения Azure Synapse для Apache Spark 3.3 и будущих версий. Рекомендуется перенести пользователей с существующими рабочими нагрузками, написанными на C# или F#, на Python или Scala. Пользователям рекомендуется учитывать эти сведения и планировать их соответствующим образом.

Отправка пакетных заданий с помощью определения задания Spark

Ознакомьтесь с учебником, который описывает применение Azure Synapse Analytics для создания определений заданий Apache Spark для пулов Synapse Spark. Если вы еще не создали пакет приложения для отправки в Azure Synapse, выполните приведенные ниже действия.

  1. Настройте зависимости приложения dotnet для совместимости с Synapse Spark. Требуемая версия .NET Spark будет указана в интерфейсе Synapse Studio в конфигурации пула Apache Spark на панели элементов управления.

    Screenshot that shows properties, including the .NET Spark version.

    Создайте проект как консольное приложение .NET, которое выводит исполняемый файл Ubuntu x86.

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Microsoft.Spark" Version="2.1.0" />
      </ItemGroup>
    
    </Project>
    
  2. Выполните следующие команды, чтобы опубликовать приложение. Не забудьте заменить mySparkApp реальным значением пути к приложению.

    cd mySparkApp
    dotnet publish -c Release -f netcoreapp3.1 -r ubuntu.18.04-x64
    
  3. Запакуйте содержимое папки публикации, publish.zip например, которая была создана в результате шага 1. Все сборки должны находиться в корне ZIP-файла. Не должны использоваться промежуточные уровни папки. Это означает, что при распаковки publish.zipвсе сборки извлекаются в текущий рабочий каталог.

    В Windows:

    С помощью Windows PowerShell или PowerShell 7 создайте ZIP-файл из содержимого каталога публикации.

    Compress-Archive publish/* publish.zip -Update
    

    В Linux:

    Откройте оболочку Bash и перейдите с помощью команды cd в каталог bin со всеми опубликованными двоичными файлами, а затем выполните приведенную ниже команду.

    zip -r publish.zip
    

.NET для Apache Spark в записных книжках Azure Synapse Analytics

Записные книжки предоставляют отличный способ создания прототипов конвейеров и сценариев .NET для Apache Spark. Вы можете быстро и эффективно начать работу с данными, анализировать их, фильтровать, отображать и визуализировать.

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

Использование .NET для записных книжек Apache Spark

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

Чтобы использовать .NET для Apache Spark в записной книжке Azure Synapse Analytics, выберите ядро .NET Spark (C#) и подключите записную книжку к существующему бессерверному пулу Apache Spark.

Записная книжка .NET Spark основана на интерактивном интерфейсе .NET и в стандартной конфигурации поддерживает все интерактивные возможности C#, в том числе .NET для Spark, а также имеет заранее определенную переменную spark сеанса Spark.

Установка пакетов NuGet в записные книжки

Вы можете установить выбранные вами пакеты NuGet в записную книжку, используя магическую команду #r nuget перед именем пакета NuGet. Пример приведен на следующей схеме.

Screenshot that shows using #r to install a Spark .NET notebook NuGet package

Дополнительные сведения о работе с пакетами NuGet в записных книжках см. в интерактивной документации по .NET.

.NET для функций ядра C# в Apache Spark

При использовании .NET для Apache Spark в записной книжке Azure Synapse Analytics доступны следующие возможности.

  • Декларативный HTML: создание выходных данных из ячеек с помощью синтаксиса HTML, таких как заголовки, маркированные списки и даже отображение изображений.
  • Простые инструкции C# (назначения, печать в консоль, создание исключений и т. д.).
  • Многострочные блоки кода C# (операторы условий, циклы foreach, определения классов и т. д.).
  • Доступ к стандартной библиотеке C# (System, LINQ, Enumerables и т. д.).
  • Поддержка функций языка C# 8.0.
  • Заранее определенная переменная spark предоставляет доступ к сеансу Apache Spark.
  • Поддержка определяемых пользователем функций .NET, которые могут выполняться в Apache Spark. Рекомендуем прочитать статью Написание и вызов определяемых пользователем функций в .NET для интерактивных сред Apache Spark, чтобы узнать, как использовать определяемые пользователем функции в .NET для интерактивного взаимодействия в Apache Spark.
  • Поддержка визуализации выходных данных из заданий Spark с использованием нескольких типов диаграмм (график, линейчатая диаграмма или гистограмма) и макетов (одиночный, наложенный и т. п.) благодаря поддержке библиотеки XPlot.Plotly.
  • Возможность включения пакетов NuGet в записную книжку C#.

Устранение неполадок

DotNetRunner: null / Futures timeout в выполнении определения заданий Synapse Spark

Определения заданий Synapse Spark в пулах Spark с помощью Spark 2.4 требуют Microsoft.Spark 1.0.0. Очистите каталоги bin и obj, а затем опубликуйте проект с использованием версии 1.0.0.

OutOfMemoryError: пространство кучи java на org.apache.spark

Dotnet Spark 1.0.0 использует архитектуру отладки, отличную от 1.1.1 и более поздних версий. Для опубликованной версии необходимо использовать версию 1.0.0, а для локальной отладки — 1.1.1+.

Следующие шаги