Я использую Scala и Spark для анализа некоторых данных.Извините, я новичок в этой области.
У меня есть данные в следующем формате (ниже). Я хочу создать RDD для фильтрации данных, группировки и преобразования данных.
В настоящее время у меня есть rdd ссписок неразобранных строк, которые я создал из rawData: список строк
val rawData ( this is ListBuffer[String] )
val rdd = sc.parallelize(rawData)
Как создать набор данных для манипулирования данными?Я хочу, чтобы в Rdd были объекты с именованными полями, строки ob.name, obj.year и т. Д. Каков правильный подход?
Должен ли я создать фрейм данных для этого?
Строки необработанных данных выглядят так: это список строк с разделенными пробелами значениями
Значение столбца: «имя», год »,« месяц »,« tmax »,« tmin », "afdays", "rainmm", "sunhours"
aberporth 1941 10 --- --- --- 106.2 ---
aberporth 1941 11 --- --- --- 92.3 ---
aberporth 1941 12 --- --- --- 86.5 ---
aberporth 1942 1 5.8 2.1 --- 114.0 58.0
aberporth 1942 2 4.2 -0.6 --- 13.8 80.3
aberporth 1942 3 9.7 3.7 --- 58.0 117.9
aberporth 1942 4 13.1 5.3 --- 42.5 200.1
aberporth 1942 5 14.0 6.9 --- 101.1 215.1
aberporth 1942 6 16.2 9.9 --- 2.3 269.3
aberporth 1942 7 17.4 11.3 12 70.2* 185.0
aberporth 1942 8 18.7 12.3 5- 78.5 141.9
aberporth 1942 9 16.4 10.7 123 146.8 129.1#
aberporth 1942 10 13.1 8.2 125 131.1 82.1l
--- - означает отсутствие данных, думаю, я могу поставить 0 в этот столбец.
70.2 *, 129.1 #, 82.l - *, # и l здесь должны быть отфильтрованы
Пожалуйста, укажите мне правильное направление.
Я нашел одно из возможных решений здесь: https://medium.com/@mrpowers/manually-creating-spark-dataframes-b14dae906393
Этот пример выглядит хорошо:
val someData = Seq(
Row(8, "bat"),
Row(64, "mouse"),
Row(-27, "horse")
)
val someSchema = List(
StructField("number", IntegerType, true),
StructField("word", StringType, true)
)
val someDF = spark.createDataFrame(
spark.sparkContext.parallelize(someData),
StructType(someSchema)
)
Как преобразовать список строк в Seq of Row?