Вам нужно указать столбец low
на дату класса, а затем вы можете использовать datediff()
в комбинации с lit()
. Использование Spark 2.2:
from pyspark.sql.functions import datediff, to_date, lit
df.withColumn("test",
datediff(to_date(lit("2017-05-02")),
to_date("low","yyyy/MM/dd"))).show()
+----------+----+------+-----+
| low|high|normal| test|
+----------+----+------+-----+
|1986/10/15| z| null|11157|
|1986/10/15| z| null|11157|
|1986/10/15| c| null|11157|
|1986/10/15|null| null|11157|
|1986/10/16|null| 4.0|11156|
+----------+----+------+-----+
Использование & lt; Spark 2.2, нам нужно сначала преобразовать столбец low
в класс timestamp
:
from pyspark.sql.functions import datediff, to_date, lit, unix_timestamp
df.withColumn("test",
datediff(to_date(lit("2017-05-02")),
to_date(unix_timestamp('low', "yyyy/MM/dd").cast("timestamp")))).show()
Вы хотите, чтобы что-то вроде этого увеличивало квоты размера сообщения в файле App.config или Web.config :
<bindings>
<basicHttpBinding>
<binding name="basicHttp" allowCookies="true"
maxReceivedMessageSize="20000000"
maxBufferSize="20000000"
maxBufferPoolSize="20000000">
<readerQuotas maxDepth="32"
maxArrayLength="200000000"
maxStringContentLength="200000000"/>
</binding>
</basicHttpBinding>
</bindings>
И используйте имя привязки в конфигурации вашей конечной точки, например
...
bindingConfiguration="basicHttp"
...
Обоснование значений прост, они достаточно велики, чтобы разместить большинство сообщений. Вы можете настроить это число в соответствии с вашими потребностями. Низкое значение по умолчанию в основном предотвращает атаки типа DOS. Чтобы сделать его 20000000, чтобы распределенная DOS-атака была эффективной, размер по умолчанию для 64k потребовал бы очень большого количества клиентов, чтобы в большинстве случаев превосходить большинство серверов.
Для меня все, что мне нужно было сделать, это добавить maxReceivedMessageSize="2147483647"
к клиенту app.config. Сервер остался нетронутым.
Еще одна важная вещь, которую я должен учитывать из своего опыта.
Я бы настоятельно советовал НЕ максимизировать maxBufferPoolSize, потому что буферы из пула никогда не выпускаются до тех пор, пока не вернется домен приложения (т.е. пул приложений).
Период большого трафика может привести к тому, что большая часть памяти будет использоваться и никогда не будет выпущена.
Подробнее здесь:
Я получил эту ошибку при использовании этих настроек в файле web.config
System.ServiceModel.ServiceActivationException
. Я установил такие настройки, как это:
<service name="idst.Controllers.wcf.Service_Talks">
<endpoint address="" behaviorConfiguration="idst.Controllers.wcf.Service_TalksAspNetAjaxBehavior"
binding="webHttpBinding" contract="idst.Controllers.wcf.Service_Talks" />
</service>
<service name="idst.Controllers.wcf.Service_Project">
<endpoint address="" behaviorConfiguration="idst.Controllers.wcf.Service_ProjectAspNetAjaxBehavior"
binding="basicHttpBinding" bindingConfiguration="" bindingName="largBasicHttp"
contract="idst.Controllers.wcf.Service_Project" />
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="largBasicHttp" allowCookies="true"
maxReceivedMessageSize="20000000"
maxBufferSize="20000000"
maxBufferPoolSize="20000000">
<readerQuotas maxDepth="32"
maxArrayLength="200000000"
maxStringContentLength="200000000"/>
</binding>
</basicHttpBinding>
2000000
довольно разные.
– arcain
24 July 2015 в 15:05
Я решил проблему на Bing Maps WPF в моем проекте. Используя CalculateRoute (). Решение в моем случае заключалось в установке maxReceivedMessageSize и maxReceivedMessageSize для атрибута «httpTransport» для раздела «customBinding».
Я установил в файле applications.config (например, myApp.config) эту конфигурацию:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IGeocodeService" />
<binding name="BasicHttpBinding_IRouteService" />
</basicHttpBinding>
<customBinding>
<binding name="CustomBinding_IGeocodeService">
<binaryMessageEncoding />
<httpTransport manualAddressing="false" maxBufferPoolSize="524288"
maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Anonymous"
bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
useDefaultWebProxy="true" />
</binding>
<binding name="CustomBinding_IRouteService">
<binaryMessageEncoding />
<httpTransport manualAddressing="false" maxBufferPoolSize="524288"
maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Anonymous"
bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
useDefaultWebProxy="true" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IGeocodeService"
contract="BingServices.IGeocodeService" name="BasicHttpBinding_IGeocodeService" />
<endpoint address="http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc/binaryHttp"
binding="customBinding" bindingConfiguration="CustomBinding_IGeocodeService"
contract="BingServices.IGeocodeService" name="CustomBinding_IGeocodeService" />
<endpoint address="http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IRouteService"
contract="BingServices.IRouteService" name="BasicHttpBinding_IRouteService" />
<endpoint address="http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc/binaryHttp"
binding="customBinding" bindingConfiguration="CustomBinding_IRouteService"
contract="BingServices.IRouteService" name="CustomBinding_IRouteService" />
</client>
</system.serviceModel>
У тестируемого клиента WCF есть своя конфигурация клиента.
Запустите тестовый клиент и прокрутите вниз. Если вы дважды щелкните узел «Файл конфигурации», вы увидите представление XML. Как вы видите, maxReceivedMessageSize
- 65536
.
Чтобы отредактировать это, щелкните правой кнопкой мыши узел дерева файлов Config и выберите «Редактировать» с помощью SvcConfigEditor
. Когда редактор откроет расширение Bindings и дважды щелкните ссылку, которая была автоматически сгенерирована.
Здесь вы можете редактировать все свойства, включая maxReceivedMessageSize
. По завершении нажмите Файл - Сохранить .
Наконец, когда вы вернетесь в окно тестового клиента WCF, нажмите Tools - Options .
ПРИМЕЧАНИЕ: Снимите флажок Всегда восстанавливать конфигурацию, когда стартовые службы .
Не забывайте, что будет рассмотрен app.config точки ввода выполнения, а не тот, который в проекте библиотеки классов управляет вызовами Web-Service, если таковой существует.
Например, если вы получаете ошибка при запуске модульного теста, вам необходимо настроить соответствующую конфигурацию в проекте тестирования.
<bindings>
<wsHttpBinding>
<binding name="wsHttpBinding_Username" maxReceivedMessageSize="20000000" maxBufferPoolSize="20000000">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" establishSecurityContext="false"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint
binding="wsHttpBinding"
bindingConfiguration="wsHttpBinding_Username"
contract="Exchange.Exweb.ExchangeServices.ExchangeServicesGenericProxy.ExchangeServicesType"
name="ServicesFacadeEndpoint" />
</client>
Для HTTP:
<bindings>
<basicHttpBinding>
<binding name="basicHttp" allowCookies="true"
maxReceivedMessageSize="20000000"
maxBufferSize="20000000"
maxBufferPoolSize="20000000">
<readerQuotas maxDepth="200"
maxArrayLength="200000000"
maxBytesPerRead="4096"
maxStringContentLength="200000000"
maxNameTableCharCount="16384"/>
</binding>
</basicHttpBinding>
</bindings>
Для TCP:
<bindings>
<netTcpBinding>
<binding name="tcpBinding"
maxReceivedMessageSize="20000000"
maxBufferSize="20000000"
maxBufferPoolSize="20000000">
<readerQuotas maxDepth="200"
maxArrayLength="200000000"
maxStringContentLength="200000000"
maxBytesPerRead="4096"
maxNameTableCharCount="16384"/>
</binding>
</netTcpBinding>
</bindings>
ВАЖНО:
Если вы пытаетесь передать сложный объект с множеством подключенных объектов (например: структура данных дерева, список, в котором много объектов ...), связь будет терпеть неудачу независимо от того, как вы увеличили квоты. В таких случаях вы должны увеличить количество объектов:
<behaviors>
<serviceBehaviors>
<behavior name="NewBehavior">
...
<dataContractSerializer maxItemsInObjectGraph="2147483646"/>
</behavior>
</serviceBehaviors>
</behaviors>
Я нашел простой способ
- щелкните правой кнопкой мыши файл конфигурации webconfig или app и нажмите EDIT CONFIGURATION для WCF и получите доступ к bingdigs ans select yore service и правой стороне show maxReciveMessageSize, чтобы получить большой число ---
blockquote>
Я решаю задачу ... следующим образом
<bindings>
<netTcpBinding>
<binding name="ECMSBindingConfig" closeTimeout="00:10:00" openTimeout="00:10:00"
sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647" portSharingEnabled="true">
<readerQuotas maxArrayLength="2147483647" maxNameTableCharCount="2147483647"
maxStringContentLength="2147483647" maxDepth="2147483647"
maxBytesPerRead="2147483647" />
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ECMSServiceBehavior">
<dataContractSerializer ignoreExtensionDataObject="true" maxItemsInObjectGraph="2147483647" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceTimeouts transactionTimeout="00:10:00" />
<serviceThrottling maxConcurrentCalls="200" maxConcurrentSessions="100"
maxConcurrentInstances="100" />
</behavior>
</serviceBehaviors>
</behaviors>
Если вы все еще получаете это сообщение об ошибке при использовании тестового клиента WCF, это связано с тем, что у клиента есть отдельный параметр MaxBufferSize.
Чтобы исправить ошибку:
Появится список редактируемых настроек, включая MaxBufferSize.
Примечание: Автогенерированные прокси-клиенты также устанавливают MaxBufferSize на 65536 по умолчанию .