Примечания к большим данным — преобразование между 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
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода