Похоже, это не проблема с toSeq.toDS()
. Часть кода, которым вы поделились, должна работать без каких-либо ошибок / исключений. Я подготовил тестовые данные, как показано ниже, и смог успешно работать. Пожалуйста, найдите образец кода, как показано ниже. Это должно быть проблемой с другим фрагментом кода. Я бы попросил вас поделиться всем кодом.
import org.apache.spark.sql.SparkSession
import scala.collection.mutable.ListBuffer
object TestToSeqToDs extends App {
val spark = SparkSession
.builder()
.master("local")
.appName("Test toSeq.toDS() function")
.getOrCreate()
def jList(): Option[Seq[String]] = {
try {
Some(Seq(("john"), ("Edward")))
} catch {
case e: Exception => None
}
}
var w = new ListBuffer[String]()
jList match {
case Some(x) => {
for (record <- x) {
w += record
}
}
case None => println("That didn't work.")
}
import spark.implicits._
val jsonDataSet = w.toSeq.toDS()
//OR
val jsonDataSet = w.toDS()
println(jsonDataSet.show())
+------+
| value|
+------+
| john|
|Edward|
+------+
}
Спасибо!
Mike Dalessio (одна половина разработчиков ядра Nokogiri) дал мне ответ на #nokogiri
(irc.freenode.net). Не похож ни на CSS Nokogiri, ни на поиск XPath, действительно поддерживают соответствие regex. Это - его решение о том, как искать регулярные выражения с Nokogiri:
require 'rubygems'
require 'nokogiri'
value = Nokogiri::HTML.parse(<<-HTML_END)
"<html>
<body>
<p id='para-1'>A</p>
<p id='para-22'>B</p>
<h1>Bla</h1>
<p id='para-3'>C</p>
<p id='para-4'>D</p>
<div class="foo" id="eq-1_bl-1">
<p id='para-5'>3</p>
</div>
<div class="bar" id="eq-1_bl-1">
<p id='para-5'>3</p>
</div>
</body>
</html>"
HTML_END
# my_block is given
my_bl = "1"
# my_eq corresponds to this regex
my_eq = "[0-9]+"
# full regex to search for in node ids
full_regex = %r(eq-#{my_eq}_bl-#{my_bl})
filter_by_id = Class.new do
attr_accessor :matches
def initialize(regex)
@regex = regex
@matches = []
end
def filter(node_set)
@matches += node_set.find_all { |x| x['id'] =~ @regex }
end
end.new(full_regex)
value.css("div.foo:filter()", filter_by_id)
filter_by_id.matches.each do |node|
puts node
end