小编Ric*_*ard的帖子

数据帧Spark scala爆炸json数组

假设我有一个如下所示的数据框:

+--------------------+--------------------+--------------------------------------------------------------+
|                id  |           Name     |                                                       Payment|
+--------------------+--------------------+--------------------------------------------------------------+
|                1   |           James    |[ {"@id": 1, "currency":"GBP"},{"@id": 2, "currency": "USD"} ]|
+--------------------+--------------------+--------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

架构是:

根

|-- id: integer (nullable = true)
|-- Name: string (nullable = true)   
|-- Payment: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)

我怎样才能将上面的JSON数组分解为:

+--------------------+--------------------+-------------------------------+
|                id  |           Name     |                        Payment|
+--------------------+--------------------+-------------------------------+
|                1   |           James    |   {"@id":1, "currency":"GBP"} |
+--------------------+--------------------+-------------------------------+
|                1   |           James    |   {"@id":2, "currency":"USD"} |
+--------------------+--------------------+-------------------------------+
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用如下所示的爆炸功能,但它不起作用.它给出了一个关于无法分解字符串类型的错误,并且它需要一个映射或数组.这是有道理的,因为架构表示它是一个字符串,而不是数组/映射,但我不知道如何将其转换为适当的格式.

val newDF = dataframe.withColumn("nestedPayment", explode(dataframe.col("Payment")))
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏!

json scala dataframe apache-spark apache-spark-sql

6
推荐指数
1
解决办法
5968
查看次数

rspec没有保存到数据库

我正在尝试测试下面的登录方法,但似乎没有将data_provider_user保存到数据库。我已经使用调试器进行了检查,并且在离开方法并返回到rspec代码之前,它可以正常工作,如下所示。我还检查了对象是否使用.valid保存后是否有效?就是这样,我有点迷路了!

def login
 require 'TwitterOauth'
 @data_provider_user = DataProviderUser.find(params[:id])

 if @data_provider_user.twitter?

  @request_token = TwitterOauth.request_url

  @data_provider_user.access_token = @request_token.token
  @data_provider_user.oauth_token_secret = @request_token.secret

  if @data_provider_user.save
    debugger
    redirect_to @request_token.authorize_url              
  end      

 end
end
Run Code Online (Sandbox Code Playgroud)

测试:

it "should update the tokens" do
    require 'TwitterOauth'
    TwitterOauth.stub(:request_url).and_return(@token)
    debugger
    get :login, {id: @data_provider_user.id}
    debugger
    @data_provider_user.access_token.should_not eq(nil)
    @data_provider_user.oauth_token_secret.should_not eq(nil)
  end
Run Code Online (Sandbox Code Playgroud)

调试器输出:

#<DataProviderUser id: 84, user_id: 63, data_provider_id: 63, username: nil, password: nil, created_at: "2013-02-19 15:21:59", updated_at: "2013-02-19 15:21:59", access_token: nil, update_frequency: nil, oauth_token_secret: nil>

#<DataProviderUser id: 84, user_id: 63, data_provider_id: 63, username: …
Run Code Online (Sandbox Code Playgroud)

ruby rspec ruby-on-rails

1
推荐指数
1
解决办法
2553
查看次数