Примечания к большим данным — преобразование между DataFrame и RDD
Примечания к большим данным — преобразование между DataFrame и RDD

Существует два способа преобразования между DataFrame и RDD в Spark SQL:

  • ① Используя механизм отражения, деривация содержит определенный тип из RDD, провестиотражение преобразовать его к указанному типу из DataFrame, подходит для того, чтобы знать заранее RDD из Schema。
  • ② привести оправдание программирования RDD Получите интерактивность Схема и динамический создатель DataFrame, столбцы и их типы определяются во время выполнения.

DataFrame Информация о структуре данных в Scheme

① Получить схему в RDD посредством отражения.

(Условия использования)известныйдобрыйиз Схема, использование этого метода на основе отражения сделает код более кратким и эффект будет лучше.существовать Scala в, использовать case class Тип импорта RDD и преобразован в DataFrame, через case class создавать Schema,case class Имена параметров будут использоваться в качестве имен столбцов с использованием механизма отражения. случай class Могут быть вложены и объединены в Sequences или Множество. Этот вид RDD можно эффективно преобразовать в DataFrame и зарегистрирован как таблица.

Во-вторых, при необходимости RDD и DFS или DS Для работы между ними необходимо ввести import sqlContext.implicits._

  • здесьиз sqlContext Не давать название пакета, а дасоздавать SparkSession объект(здесьдля SQLContext объект)из имени переменной, поэтому сначала необходимо создать SparkSession объект, затем импортируйте.
  • здесь sqlContext объект нельзя использовать var заявление, потому что Scala Поддерживает только val Изменитьизобъектизпредставлять。

SparkSession да Spark 2.0 представил концепции, которые инкапсулируют SQLContext и HiveContext。

Язык кода:javascript
копировать
package sparksql  
  
import org.apache.spark.sql.SQLContext  
import org.apache.spark.{SparkConf, SparkContext}  
  
object DataFrametoRDDofReflection {  
  def main(args: Array[String]): Unit = {  
  
  }  

  def method1():Unit = {  
  
    val sparkConf = new SparkConf().setAppName("DataFrametoRDDofReflection").setMaster("local[2]")  
    val sc = new SparkContext(sparkConf)  
    val sqlContext = new SQLContext(sc)  
    
    // представлять sqlContext.implicits._
    import sqlContext.implicits._  
  
    // Воля RDD Преобразовать в DataFrame    
	/*val people = sc.textFile("people.txt").toDF()*/    
	val people = sc.textFile("people.txt").map(_.split(",")).map(p=>Person(p(0),p(1).trim.toInt)).toDF()  
  
    people.show()  
  
    people.registerTempTable("people")  
    val teenagers = sqlContext.sql("SELECT name,age FROM people WHERE age >= 13 AND age <= 19")  
    teenagers.show()  
  
    // DataFrame Преобразовать в RDD Выполнить операцию: получить значение на основе индексного номера  
    teenagers.map(t=>"Name:" + t(0)).collect().foreach(println)  
  
    // DataFrame Преобразовать в RDD Выполните операцию: получите значение по имени поля  
    teenagers.map(t=>"Name:" + t.getAs[String]("name")).collect().foreach(println)  
  
    // DataFrame Преобразовать в RDD Выполнить операцию: вернуть сразу несколько столбцов значений  
    teenagers.map(_.getValuesMap[Any](List("name","age"))).collect().foreach(println)  
  
    sc.stop()  
  
  }

  
  /**  
   * определение Person добрый  
   * @param name Имя  
   * @param age возраст  
   */  
  case class Person(name:String,age:Int)  
  
}

② Выполнение схемы через интерфейс программирования.

проходить Spark SQL изинтерфейссоздавать RDD из Schema,Такой подход делает код более многословным. Преимущества этого метода,существует знает данные из столбца и столбца из хорошего типа из регистра во время выполнения,Схемы могут генерироваться динамически. Для создания DataFrame вы можете выполнить следующие три шага:

  • Первым шагом будет RDD Преобразовать, чтобы включить row объектиз RDD
  • Второй шаг основан на structType добрыйформасоздавать Схема, я первый шаг созоватиз RDD хочу соответствовать
  • Шаг 3проходить SQLContext из createDataFrame Метод первого шага из RDD приложение Schema
Язык кода:javascript
копировать
package sparksql  
  
import org.apache.spark.sql.SQLContext  
import org.apache.spark.{SparkConf, SparkContext}  
  
object DataFrametoRDDofInterface {  
  
  def main(args: Array[String]): Unit = {  
    method2()  
  }  
  
  def method2(): Unit = {  
    val sparkConf = new SparkConf().setAppName("DataFrametoRDDofInterface").setMaster("local[2]")  
    val sc = new SparkContext(sparkConf)  
    val sqlContext = new SQLContext(sc)  
  
    import sqlContext.implicits._  
    
    val people = sc.textFile("people.txt")  
  
    // в строке определения пути DataFrame из Schema информация  
    val schemaString = "name age"  
  
    // Требуется импорт издобрый  
    import org.apache.spark.sql.Row  
    import org.apache.spark.sql.types.{StructType,StructField,StringType}  
  
    // По строке с момента определенияиз schema информацияпроизводить DataFrame из Schema    
    val schema = StructType(  
      schemaString.split(" ").map(fieldName=>StructField(fieldName,StringType,true)))  
    
    // Воля RDD преобразован в Row    
    val rowRDD = people.map(_.split(",")).map(p=>Row(p(0),p(1).trim))  
  
    // Воля Schema Действуйте RDD начальство  
    val peopleDataFrame = sqlContext.createDataFrame(rowRDD,schema)  
  
    // Воля DataFrame Зарегистрировать как временную таблицу  
    peopleDataFrame.registerTempTable("people")  
  
    // получать name Поле значения  
    val results = sqlContext.sql("SELECT name FROM people")  
    results.map(t => "Name" + t(0)).collect().foreach(println) 
     
    sc.stop()  
    
  }  
}
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose