下面是我的数据框。
+-------+----+----------+ | city|year|saleAmount| +-------+----+----------+ |Toronto|2017| 50.0| |Toronto|null| 50.0| |Sanjose|2017| 200.0| |Sanjose|null| 200.0| | Plano|2015| 50.0| | Plano|2016| 50.0| | Plano|null| 100.0| |Newyork|2016| 150.0| |Newyork|null| 150.0| | Dallas|2016| 100.0| | Dallas|2017| 120.0| | Dallas|null| 220.0| | null|null| 720.0| +-------+----+----------+
I tried to convert that to xml using
df.write.format("com.databricks.spark.xml")
.mode("overwrite")
.option("treatEmptyValuesAsNulls", "true")
.option("rowTag", "ROW")
.save("myxml")
但是下面的xml中缺少一些标签
<ROWS>
<ROW>
<city>Toronto</city>
<year>2017</year>
<saleAmount>50.0</saleAmount>
</ROW>
<ROW>
<city>Toronto</city>
<saleAmount>50.0</saleAmount>
</ROW>
<ROW>
<city>Sanjose</city>
<year>2017</year>
<saleAmount>200.0</saleAmount>
</ROW>
<ROW>
<city>Sanjose</city>
<saleAmount>200.0</saleAmount>
</ROW>
<ROW>
<city>Plano</city>
<year>2015</year>
<saleAmount>50.0</saleAmount>
</ROW>
<ROW>
<city>Plano</city>
<year>2016</year>
<saleAmount>50.0</saleAmount>
</ROW>
<ROW>
<city>Plano</city>
<saleAmount>100.0</saleAmount>
</ROW>
<ROW>
<city>Newyork</city>
<year>2016</year>
<saleAmount>150.0</saleAmount>
</ROW>
<ROW>
<city>Newyork</city>
<saleAmount>150.0</saleAmount>
</ROW>
<ROW>
<city>Dallas</city>
<year>2016</year>
<saleAmount>100.0</saleAmount>
</ROW>
<ROW>
<city>Dallas</city>
<year>2017</year>
<saleAmount>120.0</saleAmount>
</ROW>
<ROW>
<city>Dallas</city>
<saleAmount>220.0</saleAmount>
</ROW>
<ROW>
<saleAmount>720.0</saleAmount>
</ROW>
</ROWS>
DataFrame 在打印时,如上所示,它正确地给出了所有空值。但是当转换为 XML 时,相应的 xml 元素标签丢失了……这是 databrics XML api 的工作方式吗?
在上面的 xml 中,year 丢失了...因为 year 值在数据框中为 null。
spark-xml里面有没有选项哪些 null 值标签也显示在其中?
最佳答案
如果你想输出空标签,你需要提供一个默认的nullValue,它会出现在标签中:
df.write.format("xml")
.mode("overwrite")
.option("nullValue", "")
.option("rowTag", "ROW")
.save("myxml")
会产生
<ROWS>
<ROW>
<city>Toronto</city>
<year>2017</year>
<saleAmount>50.0</saleAmount>
</ROW>
<ROW>
<city>Toronto</city>
<year></year>
<saleAmount>50.0</saleAmount>
</ROW>
<ROW>
<city>Sanjose</city>
<year>2017</year>
<saleAmount>200.0</saleAmount>
</ROW>
<ROW>
<city>Sanjose</city>
<year></year>
<saleAmount>200.0</saleAmount>
</ROW>
<ROW>
<city>Plano</city>
<year>2015</year>
<saleAmount>50.0</saleAmount>
</ROW>
...
</ROWS>
现在这可能是一个非常糟糕的主意,因为您不能为每个标签指定不同的值,因此很容易生成不符合它们应符合的任何 XSD 的 xml 文件。
在上面的示例中,要读取生成的文件,您需要将 treatEmptyValuesAsNulls 选项设置为 true 或指定一个 nullValue 选项:
val df = spark.read.format("xml").option("treatEmptyValuesAsNulls","true").load("myxml")
or
val df = spark.read.format("xml").option("nullValue","").load("myxml")
关于xml - 当出现空值时,Spark XML 标签丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57810921/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我试图使用yard记录一些Ruby代码,尽管我所做的正是所描述的here或here#@param[Integer]thenumberoftrials(>=0)#@param[Float]successprobabilityineachtrialdefinitialize(n,p)#initialize...end虽然我仍然得到这个奇怪的错误@paramtaghasunknownparametername:the@paramtaghasunknownparametername:success然后生成的html看起来很奇怪。我称yard为:$yarddoc-mmarkdown我做错了什么?
我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm
下面的代码工作正常:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson)do|key,oldv,newv|ifkey==:aoldvelsifkey==:bnewvelsekeyendendputskerson.inspect但是如果我在“ifblock”中添加return,我会得到一个错误:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson
我有这样的HTML代码:Label1Value1Label2Value2...我的代码不起作用。doc.css("first").eachdo|item|label=item.css("dt")value=item.css("dd")end显示所有首先标记,然后标记标签,我需要“标签:值” 最佳答案 首先,您的HTML应该有和中的元素:Label1Value1Label2Value2...但这不会改变您解析它的方式。你想找到s并遍历它们,然后在每个你可以使用next_element得到;像这样:doc=Nokogiri::HTML(
我有以下不起作用的代码:=form_for(resource,:as=>resource_name,:url=>session_path(resource_name),:html=>{:class=>"well"})do|f|=f.label:email=f.email_field:email=f.label:password=f.password_field:password-ifdevise_mapping.rememberable?%p=f.label:remember_me,:class=>"checkbox"=f.check_box:remember_me,:class=>"
我正在使用macos,我想使用ruby驱动程序连接到sqlserver。我想使用tiny_tds,但它给出了缺少free_tds的错误,但它已经安装了。怎么能过这个?~brewinstallfreetdsWarning:freetds-0.91.112alreadyinstalled~sudogeminstalltiny_tdsBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtiny_tds:ERROR:Failedtobuildgemnativeextension.完整日志如下:/System
我有以下haml:9%strongAskedby:10=link_to@user.full_name,user_path(@user)11.small="(#{@question.created_at.strftime("%B%d,%Y")})"这当前将链接和日期放在不同的行上,当它看起来像“链接(日期)”并且日期的类跨度为小...... 最佳答案 您的代码将生成类似这样的html:Askedby:UsernameApril26,2011当您使用类似.small的东西(即使用点而不指定元素类型)时,haml会创建一个implicit
我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::